SOSAW080: Added first bunch of basic changes to helpers
SOSAW080: Make SdrModel& prerequisite to SdrObjects
Added need for SdrModel& in constructors of SdrModel,
SdrPage, SdrView and SdrObjList. Builds, not finished.
SOSAW080: removed and replaced old SdrModel
Removed and replaced GetModel()/SetModel() in all using
classes (SdrObject, SdrPage, SdrView), added accessors
to new referenced SdrModel, adapted all accessing places.
Refactored/Extended ::Clone and ::operator== for these
classes to allow cloning objects to a target SdrModel.
Adapted places where this is done AFAP. Added quite some
comments (tagged with 'TTTT') where possible further work
is needed. Builds completely, thus checking in. This does
not mean that this change is done yet.
SOSAW080: Adapted SdrPage/SdrModel relationship
Also needed to work on copy-construction of SdrPage and hierarchy,
quite some stuff removed, no copy-constructor anymore, no
MigrateItemPool stuff. Builds well, test stuck, will need
some cleanup/finetunung
SOSAW080: Smaller corrections/includes adapted
SOSAW080: Smaller corrections/includes adapted
SOSAW080: Debugging/Stabilizing/MakeUnitTestWork
SOSAW080: Stabilized for UnitTests, cleanups
SOSAW080: Adapted GetObjGraphic to just take a const SdrObject&
SOSAW080: Removed ChangeModel from classes
Classes SvxTextEditSource and SvxDrawPage (including
TextEditSource stuff) do not need change of SdrModel
anymore.
SOSAW080: Adapted some comments to make more readable
SOSAW080: Corrected constructor
SOSAW080: getSdrModelFromUnoModel added override marks
SOSAW080: Added missing includes
SOSAW080: Corrected SdrPage constructor
SOSAW080: Corrected some SdrObject::Clone scenarios
Especially when cloning to another SdrModel and taking
the sdr::properties into account.
SOSAW080: Added include for Mac-Build
SOSAW080: Added Scale to DefaultProperties
If a SdrModel change happens in DefaultProperties copy
constructor (used from Clone()), potentially a Scale
for the SfxItems has to be done.
SOSAW080: Added missing include for MacBuild
SOSAW080: Corrected CppunitTest_sc_anchor_test
An adaption of a SdrPathObj instantiation was missing,
added that. Seems as if that test is no tpart of the
usual 'make' scenario, but used/executed in gerrit builds
SOSAW080: Reworked SvxShape to use SdrObject's SdrModel
SOSAW080: Reworked SvxShape to use SdrObject's SdrModel
SOSAW080: Free SdrObjects when SdrModel goes down
In an UNO API test problem is that SvxShapes reference
SdrShapes, but these are not added to a SdrPage and not
'owned' by the SvxShape. Thus these do not get deleted
at all (same in master, memory leak). I extended
SvxShape::Notify the case for ModelCleared to also
Free the SdrObject when not owner and it's not added to
a SdrPage (in that case it gets deleted with deleting
the SdrModel)
SOSAW080: Solve UNO API calls that move SvxShapes to other Model
Due to UNO API tests I got a call to insert an xShape to a
xDrawPage which was constructed in another Model, this has now to
be done by Cloning the SdrObject to the new SdrModel, getting
rid of the old one and getting all the UNO implementation
stuff right (referemces SdrObject <-> xShape).
Change-Id: Iaf53535de0502a481466be74a1768bbb39f0e78c
1cb7d573d323e98a89761fe662c10c4a654fdec0
24617494a0ef79f6e33dfcb02782a833a81c6434
763f39094b6a48b529a6952d01468f8776c97679
242b9e228a9a042c3a5bdd38b1ea6600144276d5
242b9e228a9a042c3a5bdd38b1ea6600144276d5
33a6f3f306b70c223171aef796dd5ee041ad14df
6878b33f8b05738a44c0910e40a60a0f0d1d58ed
0a636caf3cb36c2f9c6cd11aa22cb9bc435dc8f2
8c4626274a5cc531dad27f27c0c45d4c528fb2fb
446685a49a6d67aedd01cfbbd5e87b07f97a4d7b
c1b5ed3c99bc7219a0061e4ece24ea42afd2889a
22de9a1c8af7c25be5c108671ddc548ba323ed47
4caf6b6fbbe6e8130741d793dffb560fd01d4ed5
488b9601735ec1822433f82f633990063951fe08
c366d60299f239e3df856ddffedb19e743e4be0c
c5137ba8c597c7b5f90318df50e87b93a39a28dc
f9e646242cf89f6fde1315046952252a2c429779
f830fbc5fadd89d04be5edd2a5abf9b0d4bf0410
1694b54903df784385abaa8452e1201e12344238
17bcb44d2e29920c0c74430c2d9c703b36cfa0ad
17bcb44d2e29920c0c74430c2d9c703b36cfa0ad
7b5c241faec7488924e5935ae8b19f785846b5e4
bf097ee7467895823fbd158a2a9543da3b5a5078
diff --git a/basctl/source/dlged/dlged.cxx b/basctl/source/dlged/dlged.cxx
index ec3a2e0..186e835 100644
--- a/basctl/source/dlged/dlged.cxx
+++ b/basctl/source/dlged/dlged.cxx
@@ -347,7 +347,7 @@
m_xUnoControlDialogModel = xUnoControlDialogModel;
// create dialog form
pDlgEdForm = new DlgEdForm(*this);
pDlgEdForm = new DlgEdForm(*pDlgEdModel, *this);
uno::Reference< awt::XControlModel > xDlgMod( m_xUnoControlDialogModel , uno::UNO_QUERY );
pDlgEdForm->SetUnoControlModel(xDlgMod);
static_cast<DlgEdPage*>(pDlgEdModel->GetPage(0))->SetDlgEdForm( pDlgEdForm );
@@ -391,7 +391,7 @@
Any aCtrl = xNameAcc->getByName( indexToName.second );
Reference< css::awt::XControlModel > xCtrlModel;
aCtrl >>= xCtrlModel;
DlgEdObj* pCtrlObj = new DlgEdObj();
DlgEdObj* pCtrlObj = new DlgEdObj(*pDlgEdModel);
pCtrlObj->SetUnoControlModel( xCtrlModel );
pCtrlObj->SetDlgEdForm( pDlgEdForm );
pDlgEdForm->AddChild( pCtrlObj );
@@ -609,7 +609,11 @@
void DlgEditor::CreateDefaultObject()
{
// create object by factory
SdrObject* pObj = SdrObjFactory::MakeNewObject( pDlgEdView->GetCurrentObjInventor(), pDlgEdView->GetCurrentObjIdentifier(), pDlgEdPage );
SdrObject* pObj = SdrObjFactory::MakeNewObject(
*pDlgEdModel,
pDlgEdView->GetCurrentObjInventor(),
pDlgEdView->GetCurrentObjIdentifier(),
pDlgEdPage);
if (DlgEdObj* pDlgEdObj = dynamic_cast<DlgEdObj*>(pObj))
{
@@ -920,7 +924,7 @@
Reference< util::XCloneable > xClone( xCM, uno::UNO_QUERY );
Reference< awt::XControlModel > xCtrlModel( xClone->createClone(), uno::UNO_QUERY );
DlgEdObj* pCtrlObj = new DlgEdObj();
DlgEdObj* pCtrlObj = new DlgEdObj(*pDlgEdModel);
pCtrlObj->SetDlgEdForm(pDlgEdForm); // set parent form
pDlgEdForm->AddChild(pCtrlObj); // add child to parent form
pCtrlObj->SetUnoControlModel( xCtrlModel ); // set control model
diff --git a/basctl/source/dlged/dlgedfac.cxx b/basctl/source/dlged/dlgedfac.cxx
index a3e7b62..be8e592 100644
--- a/basctl/source/dlged/dlgedfac.cxx
+++ b/basctl/source/dlged/dlgedfac.cxx
@@ -69,27 +69,27 @@
switch( aParams.nObjIdentifier )
{
case OBJ_DLG_PUSHBUTTON:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlButtonModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlButtonModel", xDialogSFact );
break;
case OBJ_DLG_RADIOBUTTON:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlRadioButtonModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlRadioButtonModel", xDialogSFact );
break;
case OBJ_DLG_FORMRADIO:
pNewObj = new DlgEdObj( "com.sun.star.form.component.RadioButton", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.form.component.RadioButton", xDialogSFact );
static_cast< DlgEdObj* >( pNewObj )->MakeDataAware( mxModel );
break;
case OBJ_DLG_CHECKBOX:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlCheckBoxModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlCheckBoxModel", xDialogSFact );
break;
case OBJ_DLG_FORMCHECK:
pNewObj = new DlgEdObj( "com.sun.star.form.component.CheckBox", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.form.component.CheckBox", xDialogSFact );
static_cast< DlgEdObj* >( pNewObj )->MakeDataAware( mxModel );
break;
case OBJ_DLG_LISTBOX:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlListBoxModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlListBoxModel", xDialogSFact );
break;
case OBJ_DLG_FORMLIST:
pNewObj = new DlgEdObj( "com.sun.star.form.component.ListBox", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.form.component.ListBox", xDialogSFact );
static_cast< DlgEdObj* >( pNewObj )->MakeDataAware( mxModel );
break;
case OBJ_DLG_FORMCOMBO:
@@ -97,10 +97,10 @@
{
DlgEdObj* pNew = nullptr;
if ( aParams.nObjIdentifier == OBJ_DLG_COMBOBOX )
pNew = new DlgEdObj( "com.sun.star.awt.UnoControlComboBoxModel", xDialogSFact );
pNew = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlComboBoxModel", xDialogSFact );
else
{
pNew = new DlgEdObj( "com.sun.star.form.component.ComboBox", xDialogSFact );
pNew = new DlgEdObj(aParams.rSdrModel, "com.sun.star.form.component.ComboBox", xDialogSFact );
pNew->MakeDataAware( mxModel );
}
pNewObj = pNew;
@@ -118,25 +118,25 @@
}
break;
case OBJ_DLG_GROUPBOX:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlGroupBoxModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlGroupBoxModel", xDialogSFact );
break;
case OBJ_DLG_EDIT:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlEditModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlEditModel", xDialogSFact );
break;
case OBJ_DLG_FIXEDTEXT:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlFixedTextModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlFixedTextModel", xDialogSFact );
break;
case OBJ_DLG_IMAGECONTROL:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlImageControlModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlImageControlModel", xDialogSFact );
break;
case OBJ_DLG_PROGRESSBAR:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlProgressBarModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlProgressBarModel", xDialogSFact );
break;
case OBJ_DLG_HSCROLLBAR:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlScrollBarModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlScrollBarModel", xDialogSFact );
break;
case OBJ_DLG_FORMHSCROLL:
pNewObj = new DlgEdObj( "com.sun.star.form.component.ScrollBar", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.form.component.ScrollBar", xDialogSFact );
static_cast< DlgEdObj* >( pNewObj )->MakeDataAware( mxModel );
break;
case OBJ_DLG_FORMVSCROLL:
@@ -144,10 +144,10 @@
{
DlgEdObj* pNew = nullptr;
if ( aParams.nObjIdentifier == OBJ_DLG_VSCROLLBAR )
pNew = new DlgEdObj( "com.sun.star.awt.UnoControlScrollBarModel", xDialogSFact );
pNew = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlScrollBarModel", xDialogSFact );
else
{
pNew = new DlgEdObj( "com.sun.star.form.component.ScrollBar", xDialogSFact );
pNew = new DlgEdObj(aParams.rSdrModel, "com.sun.star.form.component.ScrollBar", xDialogSFact );
pNew->MakeDataAware( mxModel );
}
pNewObj = pNew;
@@ -165,11 +165,11 @@
}
} break;
case OBJ_DLG_HFIXEDLINE:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlFixedLineModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlFixedLineModel", xDialogSFact );
break;
case OBJ_DLG_VFIXEDLINE:
{
DlgEdObj* pNew = new DlgEdObj( "com.sun.star.awt.UnoControlFixedLineModel", xDialogSFact );
DlgEdObj* pNew = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlFixedLineModel", xDialogSFact );
pNewObj = pNew;
// set vertical orientation
try
@@ -185,35 +185,35 @@
}
} break;
case OBJ_DLG_DATEFIELD:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlDateFieldModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlDateFieldModel", xDialogSFact );
break;
case OBJ_DLG_TIMEFIELD:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlTimeFieldModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlTimeFieldModel", xDialogSFact );
break;
case OBJ_DLG_NUMERICFIELD:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlNumericFieldModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlNumericFieldModel", xDialogSFact );
break;
case OBJ_DLG_CURRENCYFIELD:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlCurrencyFieldModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlCurrencyFieldModel", xDialogSFact );
break;
case OBJ_DLG_FORMATTEDFIELD:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlFormattedFieldModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlFormattedFieldModel", xDialogSFact );
break;
case OBJ_DLG_PATTERNFIELD:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlPatternFieldModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlPatternFieldModel", xDialogSFact );
break;
case OBJ_DLG_FILECONTROL:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlFileControlModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlFileControlModel", xDialogSFact );
break;
case OBJ_DLG_SPINBUTTON:
pNewObj = new DlgEdObj( "com.sun.star.awt.UnoControlSpinButtonModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.UnoControlSpinButtonModel", xDialogSFact );
break;
case OBJ_DLG_FORMSPIN:
pNewObj = new DlgEdObj( "com.sun.star.form.component.SpinButton", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.form.component.SpinButton", xDialogSFact );
static_cast< DlgEdObj* >( pNewObj )->MakeDataAware( mxModel );
break;
case OBJ_DLG_TREECONTROL:
pNewObj = new DlgEdObj( "com.sun.star.awt.tree.TreeControlModel", xDialogSFact );
pNewObj = new DlgEdObj(aParams.rSdrModel, "com.sun.star.awt.tree.TreeControlModel", xDialogSFact );
break;
}
}
diff --git a/basctl/source/dlged/dlgedobj.cxx b/basctl/source/dlged/dlgedobj.cxx
index 41158fe..44d7b7a 100644
--- a/basctl/source/dlged/dlgedobj.cxx
+++ b/basctl/source/dlged/dlgedobj.cxx
@@ -63,18 +63,20 @@
return pDlgEdForm->GetDlgEditor();
}
DlgEdObj::DlgEdObj()
:SdrUnoObj(OUString())
,bIsListening(false)
,pDlgEdForm( nullptr )
DlgEdObj::DlgEdObj(SdrModel& rSdrModel)
: SdrUnoObj(rSdrModel, OUString())
,bIsListening(false)
,pDlgEdForm( nullptr )
{
}
DlgEdObj::DlgEdObj(const OUString& rModelName,
const css::uno::Reference< css::lang::XMultiServiceFactory >& rxSFac)
:SdrUnoObj(rModelName, rxSFac)
,bIsListening(false)
,pDlgEdForm( nullptr )
DlgEdObj::DlgEdObj(
SdrModel& rSdrModel,
const OUString& rModelName,
const css::uno::Reference< css::lang::XMultiServiceFactory >& rxSFac)
: SdrUnoObj(rSdrModel, rModelName, rxSFac)
,bIsListening(false)
,pDlgEdForm( nullptr )
{
}
@@ -500,7 +502,7 @@
sal_Int32 nCurStep = GetDlgEdForm()->GetStep();
sal_Int32 nStep = GetStep();
SdrLayerAdmin& rLayerAdmin = GetModel()->GetLayerAdmin();
SdrLayerAdmin& rLayerAdmin(getSdrModelFromSdrObject().GetLayerAdmin());
SdrLayerID nHiddenLayerId = rLayerAdmin.GetLayerID( "HiddenLayer" );
SdrLayerID nControlLayerId = rLayerAdmin.GetLayerID( rLayerAdmin.GetControlLayerName() );
@@ -604,7 +606,7 @@
}
// reorder objects in drawing page
GetModel()->GetPage(0)->SetObjectOrdNum( nOldTabIndex + 1, nNewTabIndex + 1 );
getSdrModelFromSdrObject().GetPage(0)->SetObjectOrdNum( nOldTabIndex + 1, nNewTabIndex + 1 );
pForm->UpdateTabOrderAndGroups();
}
@@ -884,9 +886,9 @@
StartListening();
}
DlgEdObj* DlgEdObj::Clone() const
DlgEdObj* DlgEdObj::Clone(SdrModel* pTargetModel) const
{
DlgEdObj* pDlgEdObj = CloneHelper< DlgEdObj >();
DlgEdObj* pDlgEdObj = CloneHelper< DlgEdObj >(pTargetModel);
DBG_ASSERT( pDlgEdObj != nullptr, "DlgEdObj::Clone: invalid clone!" );
if ( pDlgEdObj )
pDlgEdObj->clonedFrom( this );
@@ -898,7 +900,9 @@
{
// no need to really add the clone for dragging, it's a temporary
// object
SdrObject* pObj = new SdrUnoObj(OUString());
SdrObject* pObj = new SdrUnoObj(
getSdrModelFromSdrObject(),
OUString());
*pObj = *static_cast<const SdrUnoObj*>(this);
return pObj;
@@ -1193,8 +1197,10 @@
}
}
DlgEdForm::DlgEdForm (DlgEditor& rDlgEditor_) :
DlgEdForm::DlgEdForm(
SdrModel& rSdrModel,
DlgEditor& rDlgEditor_)
: DlgEdObj(rSdrModel),
rDlgEditor(rDlgEditor_)
{
}
diff --git a/basctl/source/dlged/dlgedpage.cxx b/basctl/source/dlged/dlgedpage.cxx
index 211aa86..da9ba12 100644
--- a/basctl/source/dlged/dlgedpage.cxx
+++ b/basctl/source/dlged/dlgedpage.cxx
@@ -27,14 +27,8 @@
DlgEdPage::DlgEdPage(DlgEdModel& rModel, bool bMasterPage)
: SdrPage(rModel, bMasterPage)
, pDlgEdForm(nullptr)
{
}
DlgEdPage::DlgEdPage(const DlgEdPage& rSrcPage)
: SdrPage(rSrcPage)
, pDlgEdForm(nullptr)
: SdrPage(rModel, bMasterPage)
,pDlgEdForm(nullptr)
{
}
@@ -43,23 +37,15 @@
Clear();
}
SdrPage* DlgEdPage::Clone() const
{
return Clone(nullptr);
}
SdrPage* DlgEdPage::Clone(SdrModel* const pNewModel) const
{
DlgEdPage* const pNewPage = new DlgEdPage( *this );
DlgEdModel* pDlgEdModel = nullptr;
if ( pNewModel )
{
pDlgEdModel = dynamic_cast<DlgEdModel*>( pNewModel );
assert(pDlgEdModel);
}
pNewPage->lateInit( *this, pDlgEdModel );
return pNewPage;
DlgEdModel& rDlgEdModel(static_cast< DlgEdModel& >(nullptr == pNewModel ? getSdrModelFromSdrPage() : *pNewModel));
DlgEdPage* pClonedDlgEdPage(
new DlgEdPage(
rDlgEdModel,
IsMasterPage()));
pClonedDlgEdPage->SdrPage::lateInit(*this);
return pClonedDlgEdPage;
}
diff --git a/basctl/source/dlged/dlgedview.cxx b/basctl/source/dlged/dlgedview.cxx
index aa7f1e4..12d2d57 100644
--- a/basctl/source/dlged/dlgedview.cxx
+++ b/basctl/source/dlged/dlgedview.cxx
@@ -31,9 +31,11 @@
namespace basctl
{
DlgEdView::DlgEdView (SdrModel& rModel, OutputDevice& rOut, DlgEditor& rEditor) :
SdrView(&rModel, &rOut),
DlgEdView::DlgEdView(
SdrModel& rSdrModel,
OutputDevice& rOut,
DlgEditor& rEditor)
: SdrView(rSdrModel, &rOut),
rDlgEditor(rEditor)
{
SetBufferedOutputAllowed(true);
diff --git a/basctl/source/inc/dlgedobj.hxx b/basctl/source/inc/dlgedobj.hxx
index 58f6044..4660c29 100644
--- a/basctl/source/inc/dlgedobj.hxx
+++ b/basctl/source/inc/dlgedobj.hxx
@@ -57,9 +57,11 @@
DlgEditor& GetDialogEditor ();
protected:
DlgEdObj();
DlgEdObj(const OUString& rModelName,
const css::uno::Reference< css::lang::XMultiServiceFactory >& rxSFac);
DlgEdObj(SdrModel& rSdrModel);
DlgEdObj(
SdrModel& rSdrModel,
const OUString& rModelName,
const css::uno::Reference< css::lang::XMultiServiceFactory >& rxSFac);
virtual void NbcMove( const Size& rSize ) override;
virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact) override;
@@ -94,7 +96,7 @@
virtual SdrInventor GetObjInventor() const override;
virtual sal_uInt16 GetObjIdentifier() const override;
virtual DlgEdObj* Clone() const override; // not working yet
virtual DlgEdObj* Clone(SdrModel* pTargetModel = nullptr) const override; // not working yet
void clonedFrom(const DlgEdObj* _pSource); // not working yet
// FullDrag support
@@ -152,7 +154,9 @@
mutable ::boost::optional< css::awt::DeviceInfo > mpDeviceInfo;
private:
explicit DlgEdForm (DlgEditor&);
explicit DlgEdForm(
SdrModel& rSdrModel,
DlgEditor&);
protected:
virtual void NbcMove( const Size& rSize ) override;
diff --git a/basctl/source/inc/dlgedpage.hxx b/basctl/source/inc/dlgedpage.hxx
index 814826e..164f725f 100644
--- a/basctl/source/inc/dlgedpage.hxx
+++ b/basctl/source/inc/dlgedpage.hxx
@@ -35,6 +35,7 @@
class DlgEdPage final : public SdrPage
{
DlgEdPage& operator=(const DlgEdPage&) = delete;
DlgEdPage(const DlgEdPage&) = delete;
DlgEdForm* pDlgEdForm;
@@ -43,16 +44,12 @@
explicit DlgEdPage( DlgEdModel& rModel, bool bMasterPage = false );
virtual ~DlgEdPage() override;
virtual SdrPage* Clone() const override;
virtual SdrPage* Clone( SdrModel* pNewModel ) const override;
virtual SdrPage* Clone(SdrModel* pNewModel = nullptr) const override;
void SetDlgEdForm( DlgEdForm* pForm ) { pDlgEdForm = pForm; }
DlgEdForm* GetDlgEdForm() const { return pDlgEdForm; }
virtual SdrObject* SetObjectOrdNum(size_t nOldObjNum, size_t nNewObjNum) override;
private:
DlgEdPage(const DlgEdPage& rSrcPage);
};
} // namespace basctl
diff --git a/basctl/source/inc/dlgedview.hxx b/basctl/source/inc/dlgedview.hxx
index 511abfc..c194c12 100644
--- a/basctl/source/inc/dlgedview.hxx
+++ b/basctl/source/inc/dlgedview.hxx
@@ -39,7 +39,11 @@
public:
DlgEdView (SdrModel& rModel, OutputDevice& rOut, DlgEditor& rEditor);
DlgEdView(
SdrModel& rSdrModel,
OutputDevice& rOut,
DlgEditor& rEditor);
virtual ~DlgEdView() override;
virtual void MarkListHasChanged() override;
diff --git a/basegfx/Library_basegfx.mk b/basegfx/Library_basegfx.mk
index 087e4a0..de744b5 100644
--- a/basegfx/Library_basegfx.mk
+++ b/basegfx/Library_basegfx.mk
@@ -38,6 +38,7 @@
basegfx/source/matrix/b2dhommatrix \
basegfx/source/matrix/b2dhommatrixtools \
basegfx/source/matrix/b3dhommatrix \
basegfx/source/matrix/b3dhommatrixtools \
basegfx/source/numeric/ftools \
basegfx/source/pixel/bpixel \
basegfx/source/point/b2dpoint \
diff --git a/basegfx/source/matrix/b2dhommatrix.cxx b/basegfx/source/matrix/b2dhommatrix.cxx
index 9f7d5bff..466e903 100644
--- a/basegfx/source/matrix/b2dhommatrix.cxx
+++ b/basegfx/source/matrix/b2dhommatrix.cxx
@@ -115,6 +115,11 @@
bool B2DHomMatrix::invert()
{
if(isIdentity())
{
return true;
}
Impl2DHomMatrix aWork(*mpImpl);
std::unique_ptr<sal_uInt16[]> pIndex( new sal_uInt16[Impl2DHomMatrix_Base::getEdgeLength()] );
sal_Int16 nParity;
@@ -213,6 +218,11 @@
}
}
void B2DHomMatrix::translate(const B2DTuple& rTuple)
{
translate(rTuple.getX(), rTuple.getY());
}
void B2DHomMatrix::scale(double fX, double fY)
{
const double fOne(1.0);
@@ -228,6 +238,11 @@
}
}
void B2DHomMatrix::scale(const B2DTuple& rTuple)
{
scale(rTuple.getX(), rTuple.getY());
}
void B2DHomMatrix::shearX(double fSx)
{
// #i76239# do not test against 1.0, but against 0.0. We are talking about a value not on the diagonal (!)
diff --git a/basegfx/source/matrix/b3dhommatrix.cxx b/basegfx/source/matrix/b3dhommatrix.cxx
index 6cfd054..b55dd07 100644
--- a/basegfx/source/matrix/b3dhommatrix.cxx
+++ b/basegfx/source/matrix/b3dhommatrix.cxx
@@ -203,6 +203,11 @@
}
}
void B3DHomMatrix::rotate(const B3DTuple& rRotation)
{
rotate(rRotation.getX(), rRotation.getY(), rRotation.getZ());
}
void B3DHomMatrix::translate(double fX, double fY, double fZ)
{
if(!fTools::equalZero(fX) || !fTools::equalZero(fY) || !fTools::equalZero(fZ))
@@ -217,6 +222,11 @@
}
}
void B3DHomMatrix::translate(const B3DTuple& rRotation)
{
translate(rRotation.getX(), rRotation.getY(), rRotation.getZ());
}
void B3DHomMatrix::scale(double fX, double fY, double fZ)
{
const double fOne(1.0);
@@ -233,6 +243,11 @@
}
}
void B3DHomMatrix::scale(const B3DTuple& rRotation)
{
scale(rRotation.getX(), rRotation.getY(), rRotation.getZ());
}
void B3DHomMatrix::shearXY(double fSx, double fSy)
{
// #i76239# do not test against 1.0, but against 0.0. We are talking about a value not on the diagonal (!)
diff --git a/basegfx/source/matrix/b3dhommatrixtools.cxx b/basegfx/source/matrix/b3dhommatrixtools.cxx
new file mode 100755
index 0000000..677c978
--- /dev/null
+++ b/basegfx/source/matrix/b3dhommatrixtools.cxx
@@ -0,0 +1,76 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include <basegfx/matrix/b3dhommatrixtools.hxx>
namespace basegfx
{
namespace utils
{
B3DHomMatrix UnoHomogenMatrixToB3DHomMatrix(
const com::sun::star::drawing::HomogenMatrix& rMatrixIn)
{
B3DHomMatrix aRetval;
aRetval.set(0, 0, rMatrixIn.Line1.Column1);
aRetval.set(0, 1, rMatrixIn.Line1.Column2);
aRetval.set(0, 2, rMatrixIn.Line1.Column3);
aRetval.set(0, 3, rMatrixIn.Line1.Column4);
aRetval.set(1, 0, rMatrixIn.Line2.Column1);
aRetval.set(1, 1, rMatrixIn.Line2.Column2);
aRetval.set(1, 2, rMatrixIn.Line2.Column3);
aRetval.set(1, 3, rMatrixIn.Line2.Column4);
aRetval.set(2, 0, rMatrixIn.Line3.Column1);
aRetval.set(2, 1, rMatrixIn.Line3.Column2);
aRetval.set(2, 2, rMatrixIn.Line3.Column3);
aRetval.set(2, 3, rMatrixIn.Line3.Column4);
aRetval.set(3, 0, rMatrixIn.Line4.Column1);
aRetval.set(3, 1, rMatrixIn.Line4.Column2);
aRetval.set(3, 2, rMatrixIn.Line4.Column3);
aRetval.set(3, 3, rMatrixIn.Line4.Column4);
return aRetval;
}
void B3DHomMatrixToUnoHomogenMatrix(
const B3DHomMatrix& rMatrixIn,
com::sun::star::drawing::HomogenMatrix& rMatrixOut)
{
rMatrixOut.Line1.Column1 = rMatrixIn.get(0, 0);
rMatrixOut.Line1.Column2 = rMatrixIn.get(0, 1);
rMatrixOut.Line1.Column3 = rMatrixIn.get(0, 2);
rMatrixOut.Line1.Column4 = rMatrixIn.get(0, 3);
rMatrixOut.Line2.Column1 = rMatrixIn.get(1, 0);
rMatrixOut.Line2.Column2 = rMatrixIn.get(1, 1);
rMatrixOut.Line2.Column3 = rMatrixIn.get(1, 2);
rMatrixOut.Line2.Column4 = rMatrixIn.get(1, 3);
rMatrixOut.Line3.Column1 = rMatrixIn.get(2, 0);
rMatrixOut.Line3.Column2 = rMatrixIn.get(2, 1);
rMatrixOut.Line3.Column3 = rMatrixIn.get(2, 2);
rMatrixOut.Line3.Column4 = rMatrixIn.get(2, 3);
rMatrixOut.Line4.Column1 = rMatrixIn.get(3, 0);
rMatrixOut.Line4.Column2 = rMatrixIn.get(3, 1);
rMatrixOut.Line4.Column3 = rMatrixIn.get(3, 2);
rMatrixOut.Line4.Column4 = rMatrixIn.get(3, 3);
}
} // end of namespace tools
} // end of namespace basegfx
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basegfx/source/numeric/ftools.cxx b/basegfx/source/numeric/ftools.cxx
index 994bd29..d1eca66 100644
--- a/basegfx/source/numeric/ftools.cxx
+++ b/basegfx/source/numeric/ftools.cxx
@@ -45,6 +45,59 @@
}
}
double snapToZeroRange(double v, double fWidth)
{
if(fTools::equalZero(fWidth))
{
// with no range all snaps to range bound
return 0.0;
}
else
{
if(v < 0.0 || v > fWidth)
{
double fRetval(fmod(v, fWidth));
if(fRetval < 0.0)
{
fRetval += fWidth;
}
return fRetval;
}
else
{
return v;
}
}
}
double snapToRange(double v, double fLow, double fHigh)
{
if(fTools::equal(fLow, fHigh))
{
// with no range all snaps to range bound
return 0.0;
}
else
{
if(fLow > fHigh)
{
// correct range order. Evtl. assert this (?)
std::swap(fLow, fHigh);
}
if(v < fLow || v > fHigh)
{
return snapToZeroRange(v - fLow, fHigh - fLow) + fLow;
}
else
{
return v;
}
}
}
double normalizeToRange(double v, const double fRange)
{
if(fTools::lessOrEqual(fRange, 0.0))
diff --git a/basegfx/source/range/b2drange.cxx b/basegfx/source/range/b2drange.cxx
index 2f4a3e0..331c543 100644
--- a/basegfx/source/range/b2drange.cxx
+++ b/basegfx/source/range/b2drange.cxx
@@ -51,6 +51,19 @@
}
}
B2DRange& B2DRange::operator*=( const ::basegfx::B2DHomMatrix& rMat )
{
transform(rMat);
return *this;
}
const B2DRange& B2DRange::getUnitB2DRange()
{
static const B2DRange aUnitB2DRange(0.0, 0.0, 1.0, 1.0);
return aUnitB2DRange;
}
B2IRange fround(const B2DRange& rRange)
{
return rRange.isEmpty() ?
@@ -58,6 +71,13 @@
B2IRange(fround(rRange.getMinimum()),
fround(rRange.getMaximum()));
}
B2DRange operator*( const ::basegfx::B2DHomMatrix& rMat, const B2DRange& rB2DRange )
{
B2DRange aRes( rB2DRange );
return aRes *= rMat;
}
} // end of namespace basegfx
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basegfx/source/range/b3drange.cxx b/basegfx/source/range/b3drange.cxx
index f779f18..879dbb0 100644
--- a/basegfx/source/range/b3drange.cxx
+++ b/basegfx/source/range/b3drange.cxx
@@ -40,6 +40,25 @@
}
}
B3DRange& B3DRange::operator*=( const ::basegfx::B3DHomMatrix& rMat )
{
transform(rMat);
return *this;
}
const B3DRange& B3DRange::getUnitB3DRange()
{
static const B3DRange aUnitB3DRange(0.0, 0.0, 0.0, 1.0, 1.0, 1.0);
return aUnitB3DRange;
}
B3DRange operator*( const ::basegfx::B3DHomMatrix& rMat, const B3DRange& rB3DRange )
{
B3DRange aRes( rB3DRange );
return aRes *= rMat;
}
} // end of namespace basegfx
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx b/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx
index 5efd976..b86980f 100644
--- a/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx
+++ b/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx
@@ -96,11 +96,13 @@
}
DrawViewWrapper::DrawViewWrapper( SdrModel* pSdrModel, OutputDevice* pOut)
: E3dView(pSdrModel, pOut)
, m_pMarkHandleProvider(nullptr)
, m_apOutliner(SdrMakeOutliner(OutlinerMode::TextObject, *pSdrModel))
, m_bRestoreMapMode( false )
DrawViewWrapper::DrawViewWrapper(
SdrModel& rSdrModel,
OutputDevice* pOut)
: E3dView(rSdrModel, pOut)
,m_pMarkHandleProvider(nullptr)
,m_apOutliner(SdrMakeOutliner(OutlinerMode::TextObject, rSdrModel))
,m_bRestoreMapMode( false )
{
SetBufferedOutputAllowed(true);
SetBufferedOverlayAllowed(true);
diff --git a/chart2/source/controller/drawinglayer/ViewElementListProvider.cxx b/chart2/source/controller/drawinglayer/ViewElementListProvider.cxx
index 954426f..500488a 100644
--- a/chart2/source/controller/drawinglayer/ViewElementListProvider.cxx
+++ b/chart2/source/controller/drawinglayer/ViewElementListProvider.cxx
@@ -161,7 +161,7 @@
SdrPage* pPage = new SdrPage( *pModel, false );
pPage->SetSize(Size(1000,1000));
pModel->InsertPage( pPage, 0 );
std::unique_ptr<SdrView> pView( new SdrView( pModel.get(), pVDev ) );
std::unique_ptr<SdrView> pView( new SdrView( *pModel.get(), pVDev ) );
pView->hideMarkHandles();
SdrPageView* pPageView = pView->ShowSdrPage(pPage);
diff --git a/chart2/source/controller/inc/DrawViewWrapper.hxx b/chart2/source/controller/inc/DrawViewWrapper.hxx
index 91ffdf7..2adf512 100644
--- a/chart2/source/controller/inc/DrawViewWrapper.hxx
+++ b/chart2/source/controller/inc/DrawViewWrapper.hxx
@@ -46,7 +46,10 @@
class DrawViewWrapper : public E3dView
{
public:
DrawViewWrapper(SdrModel* pModel, OutputDevice* pOut);
DrawViewWrapper(
SdrModel& rSdrModel,
OutputDevice* pOut);
virtual ~DrawViewWrapper() override;
//triggers the use of an updated first page
diff --git a/chart2/source/controller/main/ChartController.cxx b/chart2/source/controller/main/ChartController.cxx
index 139f172..02c444d 100644
--- a/chart2/source/controller/main/ChartController.cxx
+++ b/chart2/source/controller/main/ChartController.cxx
@@ -727,7 +727,7 @@
{
if( m_pDrawModelWrapper )
{
m_pDrawViewWrapper = new DrawViewWrapper(&m_pDrawModelWrapper->getSdrModel(),GetChartWindow());
m_pDrawViewWrapper = new DrawViewWrapper(m_pDrawModelWrapper->getSdrModel(),GetChartWindow());
m_pDrawViewWrapper->attachParentReferenceDevice( getModel() );
}
}
diff --git a/chart2/source/controller/main/ChartController_Tools.cxx b/chart2/source/controller/main/ChartController_Tools.cxx
index d065244..00abbf6 100644
--- a/chart2/source/controller/main/ChartController_Tools.cxx
+++ b/chart2/source/controller/main/ChartController_Tools.cxx
@@ -395,11 +395,12 @@
SdrObjListIter aIter( *pPage, SdrIterMode::DeepNoGroups );
while ( aIter.IsMore() )
{
SdrObject* pObj = aIter.Next();
SdrObject* pNewObj = ( pObj ? pObj->Clone() : nullptr );
SdrObject* pObj(aIter.Next());
// Clone to new SdrModel
SdrObject* pNewObj(pObj ? pObj->Clone(&pDrawModelWrapper->getSdrModel()) : nullptr);
if ( pNewObj )
{
pNewObj->SetModel( &pDrawModelWrapper->getSdrModel() );
pNewObj->SetPage( pDestPage );
// set position
@@ -516,7 +517,9 @@
if ( pSelectedObj )
{
xTransferable.set( new ChartTransferable(
&m_pDrawModelWrapper->getSdrModel(), pSelectedObj, aSelOID.isAdditionalShape() ) );
m_pDrawModelWrapper->getSdrModel(),
pSelectedObj,
aSelOID.isAdditionalShape() ) );
}
}
}
diff --git a/chart2/source/controller/main/ChartTransferable.cxx b/chart2/source/controller/main/ChartTransferable.cxx
index 2eeb46a..4888c480 100644
--- a/chart2/source/controller/main/ChartTransferable.cxx
+++ b/chart2/source/controller/main/ChartTransferable.cxx
@@ -46,12 +46,15 @@
namespace chart
{
ChartTransferable::ChartTransferable( SdrModel* pDrawModel, SdrObject* pSelectedObj, bool bDrawing )
:m_pMarkedObjModel( nullptr )
ChartTransferable::ChartTransferable(
SdrModel& rSdrModel,
SdrObject* pSelectedObj,
bool bDrawing)
: m_pMarkedObjModel( nullptr )
,m_bDrawing( bDrawing )
{
std::unique_ptr<SdrExchangeView> pExchgView(o3tl::make_unique<SdrView>( pDrawModel ));
SdrPageView* pPv = pExchgView->ShowSdrPage( pDrawModel->GetPage( 0 ));
std::unique_ptr<SdrExchangeView> pExchgView(o3tl::make_unique<SdrView>( rSdrModel ));
SdrPageView* pPv = pExchgView->ShowSdrPage( rSdrModel.GetPage( 0 ));
if( pSelectedObj )
pExchgView->MarkObj( pSelectedObj, pPv );
else
diff --git a/chart2/source/controller/main/ChartTransferable.hxx b/chart2/source/controller/main/ChartTransferable.hxx
index 35e4f5d..6fc8b4c 100644
--- a/chart2/source/controller/main/ChartTransferable.hxx
+++ b/chart2/source/controller/main/ChartTransferable.hxx
@@ -36,16 +36,19 @@
class ChartTransferable : public TransferableHelper
{
public:
explicit ChartTransferable( SdrModel* pDrawModel, SdrObject* pSelectedObj, bool bDrawing );
explicit ChartTransferable(
SdrModel& rSdrModel,
SdrObject* pSelectedObj,
bool bDrawing );
virtual ~ChartTransferable() override;
protected:
// implementation of TransferableHelper methods
virtual void AddSupportedFormats() override;
virtual void AddSupportedFormats() override;
virtual bool GetData( const css::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ) override;
virtual bool WriteObject( tools::SvRef<SotStorageStream>& rxOStm, void* pUserObject, sal_uInt32 nUserObjectId,
const css::datatransfer::DataFlavor& rFlavor ) override;
virtual bool WriteObject( tools::SvRef<SotStorageStream>& rxOStm, void* pUserObject, sal_uInt32 nUserObjectId,
const css::datatransfer::DataFlavor& rFlavor ) override;
private:
css::uno::Reference< css::graphic::XGraphic > m_xMetaFileGraphic;
diff --git a/chart2/source/controller/main/DrawCommandDispatch.cxx b/chart2/source/controller/main/DrawCommandDispatch.cxx
index 7e31864..6c59620 100644
--- a/chart2/source/controller/main/DrawCommandDispatch.cxx
+++ b/chart2/source/controller/main/DrawCommandDispatch.cxx
@@ -74,7 +74,7 @@
return parseCommandURL( rCommandURL, &nFeatureId, &aBaseCommand, &aCustomShapeType );
}
::basegfx::B2DPolyPolygon getPolygon(const char* pResId, SdrModel const & rModel)
::basegfx::B2DPolyPolygon getPolygon(const char* pResId, const SdrModel& rModel)
{
::basegfx::B2DPolyPolygon aReturn;
XLineEndListRef pLineEndList = rModel.GetLineEndList();
@@ -123,7 +123,7 @@
{
const SfxItemSet& rSource = pSourceObj->GetMergedItemSet();
SfxItemSet aDest(
pObj->GetModel()->GetItemPool(),
pObj->getSdrModelFromSdrObject().GetItemPool(),
svl::Items<
// Ranges from SdrAttrObj:
SDRATTR_START, SDRATTR_SHADOW_LAST,
@@ -425,8 +425,13 @@
if ( pPage )
{
SolarMutexGuard aGuard;
pObj = SdrObjFactory::MakeNewObject( pDrawViewWrapper->GetCurrentObjInventor(),
pDrawViewWrapper->GetCurrentObjIdentifier(), pPage );
pObj = SdrObjFactory::MakeNewObject(
pDrawModelWrapper->getSdrModel(),
pDrawViewWrapper->GetCurrentObjInventor(),
pDrawViewWrapper->GetCurrentObjIdentifier(),
pPage);
if ( pObj )
{
Size aObjectSize( 4000, 2500 );
diff --git a/chart2/source/view/diagram/VDiagram.cxx b/chart2/source/view/diagram/VDiagram.cxx
index 4c5bac5..897bbe3 100644
--- a/chart2/source/view/diagram/VDiagram.cxx
+++ b/chart2/source/view/diagram/VDiagram.cxx
@@ -436,7 +436,7 @@
// To get the 3D aspect ratio's effect on the 2D scene size, the scene's 2D size needs to be adapted to
// 3D content changes here. The tooling class remembers the current 3D transformation stack
// and in its destructor, calculates a new 2D SnapRect for the scene and it's modified 3D geometry.
E3DModifySceneSnapRectUpdater aUpdater(lcl_getE3dScene( m_xOuterGroupShape ));
E3DModifySceneSnapRectUpdater aUpdater(lcl_getE3dScene(m_xOuterGroupShape));
m_xAspectRatio3D->setPropertyValue( UNO_NAME_3D_TRANSFORM_MATRIX
, uno::Any(BaseGFXHelper::B3DHomMatrixToHomogenMatrix( aResult )) );
@@ -599,7 +599,8 @@
aEffectiveTranformation.shearXY(m_fYAnglePi,-m_fXAnglePi);
//#i98497# 3D charts are rendered with wrong size
E3DModifySceneSnapRectUpdater aUpdater(lcl_getE3dScene( m_xOuterGroupShape ));
E3DModifySceneSnapRectUpdater aUpdater(lcl_getE3dScene(m_xOuterGroupShape));
xDestProp->setPropertyValue( UNO_NAME_3D_TRANSFORM_MATRIX,
uno::Any( BaseGFXHelper::B3DHomMatrixToHomogenMatrix( aEffectiveTranformation ) ) );
}
@@ -656,7 +657,8 @@
::basegfx::B3DHomMatrix aM;
aM.translate(GRID_TO_WALL_DISTANCE/fXScale, GRID_TO_WALL_DISTANCE/fYScale, GRID_TO_WALL_DISTANCE/fZScale);
aM.scale( fXScale, fYScale, fZScale );
E3DModifySceneSnapRectUpdater aUpdater(lcl_getE3dScene( m_xOuterGroupShape ));
E3DModifySceneSnapRectUpdater aUpdater(lcl_getE3dScene(m_xOuterGroupShape));
xShapeProp->setPropertyValue( UNO_NAME_3D_TRANSFORM_MATRIX
, uno::Any(BaseGFXHelper::B3DHomMatrixToHomogenMatrix(aM)) );
}
diff --git a/cui/source/dialogs/sdrcelldlg.cxx b/cui/source/dialogs/sdrcelldlg.cxx
index 7789ddd..a7de7c1 100644
--- a/cui/source/dialogs/sdrcelldlg.cxx
+++ b/cui/source/dialogs/sdrcelldlg.cxx
@@ -26,14 +26,14 @@
#include <border.hxx>
#include <svx/dialogs.hrc>
SvxFormatCellsDialog::SvxFormatCellsDialog( vcl::Window* pParent, const SfxItemSet* pAttr, SdrModel const * pModel )
SvxFormatCellsDialog::SvxFormatCellsDialog( vcl::Window* pParent, const SfxItemSet* pAttr, const SdrModel& rModel )
: SfxTabDialog(pParent, "FormatCellsDialog", "cui/ui/formatcellsdialog.ui", pAttr)
, mrOutAttrs(*pAttr)
, mpColorTab(pModel->GetColorList())
, mpGradientList(pModel->GetGradientList())
, mpHatchingList(pModel->GetHatchList())
, mpBitmapList(pModel->GetBitmapList())
, mpPatternList(pModel->GetPatternList())
, mpColorTab(rModel.GetColorList())
, mpGradientList(rModel.GetGradientList())
, mpHatchingList(rModel.GetHatchList())
, mpBitmapList(rModel.GetBitmapList())
, mpPatternList(rModel.GetPatternList())
, m_nAreaPageId(0)
{
AddTabPage("name", RID_SVXPAGE_CHAR_NAME);
diff --git a/cui/source/factory/dlgfact.cxx b/cui/source/factory/dlgfact.cxx
index 8a8647b..51c7d5a 100644
--- a/cui/source/factory/dlgfact.cxx
+++ b/cui/source/factory/dlgfact.cxx
@@ -1524,9 +1524,9 @@
return VclPtr<AbstractLinksDialog_Impl>::Create( pLinkDlg );
}
VclPtr<SfxAbstractTabDialog> AbstractDialogFactory_Impl::CreateSvxFormatCellsDialog( const SfxItemSet* pAttr, SdrModel* pModel, const SdrObject* /*pObj*/ )
VclPtr<SfxAbstractTabDialog> AbstractDialogFactory_Impl::CreateSvxFormatCellsDialog( const SfxItemSet* pAttr, const SdrModel& rModel, const SdrObject* /*pObj*/ )
{
return VclPtr<CuiAbstractTabDialog_Impl>::Create( VclPtr<SvxFormatCellsDialog>::Create( nullptr, pAttr, pModel ) );
return VclPtr<CuiAbstractTabDialog_Impl>::Create( VclPtr<SvxFormatCellsDialog>::Create( nullptr, pAttr, rModel ) );
}
VclPtr<SvxAbstractSplitTableDialog> AbstractDialogFactory_Impl::CreateSvxSplitTableDialog(weld::Window* pParent, bool bIsTableVertical, long nMaxVertical)
diff --git a/cui/source/factory/dlgfact.hxx b/cui/source/factory/dlgfact.hxx
index ae87ab2..e9ea89b 100644
--- a/cui/source/factory/dlgfact.hxx
+++ b/cui/source/factory/dlgfact.hxx
@@ -690,7 +690,7 @@
const sal_uInt16 _nInitiallySelectedEvent
) override;
virtual VclPtr<SfxAbstractTabDialog> CreateSvxFormatCellsDialog( const SfxItemSet* pAttr, SdrModel* pModel, const SdrObject* pObj ) override;
virtual VclPtr<SfxAbstractTabDialog> CreateSvxFormatCellsDialog( const SfxItemSet* pAttr, const SdrModel& rModel, const SdrObject* pObj ) override;
virtual VclPtr<SvxAbstractSplitTableDialog> CreateSvxSplitTableDialog(weld::Window* pParent, bool bIsTableVertical, long nMaxVertical) override;
diff --git a/cui/source/inc/sdrcelldlg.hxx b/cui/source/inc/sdrcelldlg.hxx
index 97a2abe..0a38f75 100644
--- a/cui/source/inc/sdrcelldlg.hxx
+++ b/cui/source/inc/sdrcelldlg.hxx
@@ -40,7 +40,7 @@
sal_uInt16 m_nBorderPageId;
public:
SvxFormatCellsDialog( vcl::Window* pParent, const SfxItemSet* pAttr, SdrModel const * pModel );
SvxFormatCellsDialog( vcl::Window* pParent, const SfxItemSet* pAttr, const SdrModel& rModel );
virtual void PageCreated( sal_uInt16 nId, SfxTabPage &rPage ) override;
diff --git a/cui/source/tabpages/measure.cxx b/cui/source/tabpages/measure.cxx
index adfb0ec..58ae066 100644
--- a/cui/source/tabpages/measure.cxx
+++ b/cui/source/tabpages/measure.cxx
@@ -598,7 +598,14 @@
{
DBG_ASSERT( pView, "No valid View transferred!" );
m_pCtlPreview->pMeasureObj->SetModel( pView->GetModel() );
// TTTT
// pMeasureObj is member of SvxXMeasurePreview and can only be accessed due to
// SvxMeasurePage being a friend. It has it's own SdrModel (also in SvxXMeasurePreview)
// and 'setting' the SdrModel is a hack. The comment above about 'notify unit and
// floatingpoint-values' is not clear, but has to be done another way - if needed.
// Checked on original aw080, is just commented out there, too.
// m_pCtlPreview->pMeasureObj->SetModel( pView->GetModel() );
m_pCtlPreview->Invalidate();
}
diff --git a/cui/source/tabpages/tpline.cxx b/cui/source/tabpages/tpline.cxx
index 85f2d85..145a304 100644
--- a/cui/source/tabpages/tpline.cxx
+++ b/cui/source/tabpages/tpline.cxx
@@ -349,7 +349,7 @@
pModel->InsertPage( pPage, 0 );
{
// 3D View
std::unique_ptr<SdrView> pView(new SdrView( pModel.get(), pVDev ));
std::unique_ptr<SdrView> pView(new SdrView( *pModel, pVDev ));
pView->hideMarkHandles();
pView->ShowSdrPage(pPage);
@@ -1119,7 +1119,7 @@
pPage->SetSize(Size(1000,1000));
pModel->InsertPage( pPage, 0 );
{
std::unique_ptr<SdrView> pView(new SdrView( pModel.get(), pVDev ));
std::unique_ptr<SdrView> pView(new SdrView( *pModel, pVDev ));
pView->hideMarkHandles();
pView->ShowSdrPage(pPage);
SdrObject *pObj=nullptr;
diff --git a/cui/source/tabpages/transfrm.cxx b/cui/source/tabpages/transfrm.cxx
index 2269470..ee3f76b 100644
--- a/cui/source/tabpages/transfrm.cxx
+++ b/cui/source/tabpages/transfrm.cxx
@@ -566,15 +566,15 @@
SdrObjCustomShape& rSdrObjCustomShape(
static_cast< SdrObjCustomShape& >(
*pView->GetMarkedObjectList().GetMark(0)->GetMarkedSdrObj()));
SdrModel* pModel(rSdrObjCustomShape.GetModel());
SdrModel& rModel(rSdrObjCustomShape.getSdrModelFromSdrObject());
SdrUndoAction* pUndo(
pModel->IsUndoEnabled()
? pModel->GetSdrUndoFactory().CreateUndoAttrObject(rSdrObjCustomShape)
rModel.IsUndoEnabled()
? rModel.GetSdrUndoFactory().CreateUndoAttrObject(rSdrObjCustomShape)
: nullptr);
if(pUndo)
{
pModel->BegUndo(pUndo->GetComment());
rModel.BegUndo(pUndo->GetComment());
}
EnhancedCustomShape2d aShape(rSdrObjCustomShape);
@@ -602,8 +602,8 @@
if (pUndo)
{
pModel->AddUndo(pUndo);
pModel->EndUndo();
rModel.AddUndo(pUndo);
rModel.EndUndo();
}
}
diff --git a/filter/source/msfilter/escherex.cxx b/filter/source/msfilter/escherex.cxx
index 0eb9efe..3b3fc05 100644
--- a/filter/source/msfilter/escherex.cxx
+++ b/filter/source/msfilter/escherex.cxx
@@ -3774,10 +3774,9 @@
SdrObject* pShape = GetSdrObjectFromXShape( rXShape );
if ( pShape )
{
SdrModel* pMod = pShape->GetModel();
Graphic aGraphic(SdrExchangeView::GetObjGraphic( pMod, pShape));
const Graphic aGraphic(SdrExchangeView::GetObjGraphic(*pShape));
const GraphicObject aGraphicObject(aGraphic);
GraphicObject aGraphicObject(aGraphic);
if (!aGraphicObject.GetUniqueID().isEmpty())
{
if ( pGraphicProvider && pPicOutStrm && pShapeBoundRect )
diff --git a/filter/source/msfilter/msdffimp.cxx b/filter/source/msfilter/msdffimp.cxx
index ac281e0..e958c81 100644
--- a/filter/source/msfilter/msdffimp.cxx
+++ b/filter/source/msfilter/msdffimp.cxx
@@ -3955,7 +3955,7 @@
}
if( !pRet )
{
pRet = new SdrGrafObj;
pRet = new SdrGrafObj(*pSdrModel);
if( bGrfRead )
static_cast<SdrGrafObj*>(pRet)->SetGraphic( aGraf );
@@ -3997,7 +3997,6 @@
pRet->SetName( aFileName );
}
}
pRet->SetModel( pSdrModel ); // required for GraphicLink
pRet->SetLogicRect( rObjData.aBoundRect );
if ( dynamic_cast<const SdrGrafObj* >(pRet) != nullptr )
@@ -4307,7 +4306,7 @@
if ( aObjData.nSpFlags & ShapeFlag::Group )
{
pRet = new SdrObjGroup;
pRet = new SdrObjGroup(*pSdrModel);
/* After CWS aw033 has been integrated, an empty group object
cannot store its resulting bounding rectangle anymore. We have
to return this rectangle via rClientRect now, but only, if
@@ -4337,8 +4336,10 @@
basegfx::B2DPolygon aPoly;
aPoly.append(basegfx::B2DPoint(aObjData.aBoundRect.Left(), aObjData.aBoundRect.Top()));
aPoly.append(basegfx::B2DPoint(aObjData.aBoundRect.Right(), aObjData.aBoundRect.Bottom()));
pRet = new SdrPathObj(OBJ_LINE, basegfx::B2DPolyPolygon(aPoly));
pRet->SetModel( pSdrModel );
pRet = new SdrPathObj(
*pSdrModel,
OBJ_LINE,
basegfx::B2DPolyPolygon(aPoly));
ApplyAttributes( rSt, aSet, aObjData );
pRet->SetMergedItemSet(aSet);
}
@@ -4349,8 +4350,7 @@
ApplyAttributes( rSt, aSet, aObjData );
pRet = new SdrObjCustomShape();
pRet->SetModel( pSdrModel );
pRet = new SdrObjCustomShape(*pSdrModel);
sal_uInt32 ngtextFStrikethrough = GetPropertyValue( DFF_Prop_gtextFStrikethrough, 0 );
bool bIsFontwork = ( ngtextFStrikethrough & 0x4000 ) != 0;
@@ -4471,9 +4471,7 @@
{
SdrOutliner& rOutliner = static_cast<SdrObjCustomShape*>(pRet)->ImpGetDrawOutliner();
bool bOldUpdateMode = rOutliner.GetUpdateMode();
SdrModel* pModel = pRet->GetModel();
if ( pModel )
rOutliner.SetStyleSheetPool( static_cast<SfxStyleSheetPool*>(pModel->GetStyleSheetPool()) );
rOutliner.SetStyleSheetPool(static_cast< SfxStyleSheetPool* >(pRet->getSdrModelFromSdrObject().GetStyleSheetPool()));
rOutliner.SetUpdateMode( false );
rOutliner.SetText( *pParaObj );
ScopedVclPtrInstance< VirtualDevice > pVirDev(DeviceFormat::BITMASK);
@@ -4735,7 +4733,7 @@
basegfx::B2DPolyPolygon aPoly( static_cast<SdrObjCustomShape*>(pRet)->GetLineGeometry( true ) );
SdrObject::Free( pRet );
pRet = new SdrEdgeObj();
pRet = new SdrEdgeObj(*pSdrModel);
ApplyAttributes( rSt, aSet, aObjData );
pRet->SetLogicRect( aObjData.aBoundRect );
pRet->SetMergedItemSet(aSet);
@@ -5235,7 +5233,10 @@
}
}
pTextObj = new SdrRectObj(OBJ_TEXT, rTextRect);
pTextObj = new SdrRectObj(
*pSdrModel,
OBJ_TEXT,
rTextRect);
pTextImpRec = new SvxMSDffImportRec(*pImpRec);
bDeleteTextImpRec = true;
@@ -5364,7 +5365,6 @@
}
pTextObj->SetMergedItemSet(aSet);
pTextObj->SetModel(pSdrModel);
if (bVerticalText)
pTextObj->SetVerticalWriting(true);
@@ -5397,7 +5397,7 @@
{
if( pTextObj != pObj )
{
SdrObject* pGroup = new SdrObjGroup;
SdrObject* pGroup = new SdrObjGroup(*pSdrModel);
pGroup->GetSubList()->NbcInsertObject( pObj );
pGroup->GetSubList()->NbcInsertObject( pTextObj );
if (pOrgObj == pObj)
@@ -5413,9 +5413,11 @@
// simple rectangular objects are ignored by ImportObj() :-(
// this is OK for Draw but not for Calc and Writer
// cause here these objects have a default border
pObj = new SdrRectObj(rTextRect);
pObj = new SdrRectObj(
*pSdrModel,
rTextRect);
pOrgObj = pObj;
pObj->SetModel( pSdrModel );
SfxItemSet aSet( pSdrModel->GetItemPool() );
ApplyAttributes( rSt, aSet, rObjData );
@@ -6615,9 +6617,19 @@
ErrCode nError = ERRCODE_NONE;
uno::Reference < embed::XStorage > xDstStg;
if( GetOLEStorageName( nOLEId, sStorageName, xSrcStg, xDstStg ))
pRet = CreateSdrOLEFromStorage( sStorageName, xSrcStg, xDstStg,
rGrf, rBoundRect, rVisArea, pStData, nError,
nSvxMSDffOLEConvFlags, embed::Aspects::MSOLE_CONTENT, maBaseURL);
pRet = CreateSdrOLEFromStorage(
*GetModel(),
sStorageName,
xSrcStg,
xDstStg,
rGrf,
rBoundRect,
rVisArea,
pStData,
nError,
nSvxMSDffOLEConvFlags,
embed::Aspects::MSOLE_CONTENT,
maBaseURL);
return pRet;
}
@@ -7106,17 +7118,18 @@
// TODO/MBA: code review and testing!
SdrOle2Obj* SvxMSDffManager::CreateSdrOLEFromStorage(
const OUString& rStorageName,
tools::SvRef<SotStorage> const & rSrcStorage,
const uno::Reference < embed::XStorage >& xDestStorage,
const Graphic& rGrf,
const tools::Rectangle& rBoundRect,
const tools::Rectangle& rVisArea,
SvStream* pDataStrm,
ErrCode& rError,
sal_uInt32 nConvertFlags,
sal_Int64 nRecommendedAspect,
OUString const& rBaseURL)
SdrModel& rSdrModel,
const OUString& rStorageName,
tools::SvRef<SotStorage> const & rSrcStorage,
const uno::Reference < embed::XStorage >& xDestStorage,
const Graphic& rGrf,
const tools::Rectangle& rBoundRect,
const tools::Rectangle& rVisArea,
SvStream* pDataStrm,
ErrCode& rError,
sal_uInt32 nConvertFlags,
sal_Int64 nRecommendedAspect,
OUString const& rBaseURL)
{
sal_Int64 nAspect = nRecommendedAspect;
SdrOle2Obj* pRet = nullptr;
@@ -7184,7 +7197,12 @@
aObj.SetGraphic( rGrf, OUString() );
// TODO/MBA: check setting of PersistName
pRet = new SdrOle2Obj( aObj, OUString(), rBoundRect);
pRet = new SdrOle2Obj(
rSdrModel,
aObj,
OUString(),
rBoundRect);
// we have the Object, don't create another
bValidStorage = false;
}
@@ -7280,7 +7298,11 @@
// TODO/LATER: need MediaType
aObj.SetGraphic( rGrf, OUString() );
pRet = new SdrOle2Obj( aObj, aDstStgName, rBoundRect);
pRet = new SdrOle2Obj(
rSdrModel,
aObj,
aDstStgName,
rBoundRect);
}
}
}
diff --git a/filter/source/msfilter/svdfppt.cxx b/filter/source/msfilter/svdfppt.cxx
index 22d21cb..5758ca6 100644
--- a/filter/source/msfilter/svdfppt.cxx
+++ b/filter/source/msfilter/svdfppt.cxx
@@ -807,7 +807,10 @@
// replacing the object which we will return with a SdrPageObj
SdrObject::Free( pRet );
pRet = new SdrPageObj( rObjData.aBoundRect, pSdrModel->GetPage( nPageNum - 1 ) );
pRet = new SdrPageObj(
*pSdrModel,
rObjData.aBoundRect,
pSdrModel->GetPage(nPageNum - 1));
}
else
{
@@ -1069,8 +1072,9 @@
SdrObject::Free( pRet );
pRet = nullptr;
}
pTObj = new SdrRectObj( eTextKind != OBJ_RECT ? eTextKind : OBJ_TEXT );
pTObj->SetModel( pSdrModel );
pTObj = new SdrRectObj(
*pSdrModel,
eTextKind != OBJ_RECT ? eTextKind : OBJ_TEXT);
SfxItemSet aSet( pSdrModel->GetItemPool() );
if ( !pRet )
ApplyAttributes( rSt, aSet, rObjData );
@@ -1197,7 +1201,7 @@
}
if ( pRet )
{
SdrObject* pGroup = new SdrObjGroup;
SdrObject* pGroup = new SdrObjGroup(*pSdrModel);
pGroup->GetSubList()->NbcInsertObject( pRet );
pGroup->GetSubList()->NbcInsertObject( pTObj );
pRet = pGroup;
@@ -1880,7 +1884,11 @@
// TODO/LATER: need MediaType for Graphic
aObj.SetGraphic( rGraf, OUString() );
pRet = new SdrOle2Obj( aObj, aNm, rBoundRect );
pRet = new SdrOle2Obj(
*pSdrModel,
aObj,
aNm,
rBoundRect);
}
}
if ( !pRet && ( rOe.nType == PPT_PST_ExControl ) )
@@ -1943,7 +1951,11 @@
// TODO/LATER: need MediaType for Graphic
aObj.SetGraphic( aGraphic, OUString() );
pRet = new SdrOle2Obj( aObj, aNm, rBoundRect );
pRet = new SdrOle2Obj(
*pSdrModel,
aObj,
aNm,
rBoundRect);
}
}
}
@@ -3062,12 +3074,17 @@
pSet->Put( XFillStyleItem( drawing::FillStyle_NONE ) );
}
pSet->Put( XLineStyleItem( drawing::LineStyle_NONE ) );
tools::Rectangle aRect( rPage.GetLeftBorder(), rPage.GetUpperBorder(), rPage.GetWidth()-rPage.GetRightBorder(), rPage.GetHeight()-rPage.GetLowerBorder() );
pRet = new SdrRectObj( aRect );
pRet->SetModel( pSdrModel );
tools::Rectangle aRect(
rPage.GetLeftBorder(),
rPage.GetUpperBorder(),
rPage.GetWidth() - rPage.GetRightBorder(),
rPage.GetHeight() - rPage.GetLowerBorder());
pRet = new SdrRectObj(
*pSdrModel,
aRect);
pRet->SetMergedItemSet(*pSet);
pRet->SetMarkProtect( true );
pRet->SetMoveProtect( true );
pRet->SetResizeProtect( true );
@@ -7572,7 +7589,7 @@
if (aRows.empty())
return pRet;
sdr::table::SdrTableObj* pTable = new sdr::table::SdrTableObj( pSdrModel );
sdr::table::SdrTableObj* pTable = new sdr::table::SdrTableObj(*pSdrModel);
pTable->uno_lock();
Reference< XTable > xTable( pTable->getTable() );
diff --git a/filter/source/svg/svgexport.cxx b/filter/source/svg/svgexport.cxx
index e923eb9..056c1c7 100644
--- a/filter/source/svg/svgexport.cxx
+++ b/filter/source/svg/svgexport.cxx
@@ -560,9 +560,9 @@
if( pSvxDrawPage )
{
mpDefaultSdrPage = pSvxDrawPage->GetSdrPage();
mpSdrModel = mpDefaultSdrPage->GetModel();
mpSdrModel = &mpDefaultSdrPage->getSdrModelFromSdrPage();
if( mpSdrModel )
if( mpSdrModel ) // TTTT should be reference
{
SdrOutliner& rOutl = mpSdrModel->GetDrawOutliner();
@@ -921,8 +921,8 @@
if( pSvxDrawPage )
{
SdrPage* pSdrPage = pSvxDrawPage->GetSdrPage();
SdrModel* pSdrModel = pSdrPage->GetModel();
nPageNumberingType = pSdrModel->GetPageNumType();
SdrModel& rSdrModel(pSdrPage->getSdrModelFromSdrPage());
nPageNumberingType = rSdrModel.GetPageNumType();
// That is used by CalcFieldHdl method.
mVisiblePagePropSet.nPageNumberingType = nPageNumberingType;
@@ -1384,8 +1384,8 @@
if( pSvxDrawPage )
{
SdrPage* pSdrPage = pSvxDrawPage->GetSdrPage();
SdrModel* pSdrModel = pSdrPage->GetModel();
mVisiblePagePropSet.nPageNumberingType = pSdrModel->GetPageNumType();
SdrModel& rSdrModel(pSdrPage->getSdrModelFromSdrPage());
mVisiblePagePropSet.nPageNumberingType = rSdrModel.GetPageNumType();
}
}
}
@@ -1931,7 +1931,7 @@
if( pObj )
{
Graphic aGraphic( SdrExchangeView::GetObjGraphic( pObj->GetModel(), pObj ) );
const Graphic aGraphic(SdrExchangeView::GetObjGraphic(*pObj));
if( aGraphic.GetType() != GraphicType::NONE )
{
diff --git a/include/basegfx/matrix/b2dhommatrix.hxx b/include/basegfx/matrix/b2dhommatrix.hxx
index a7ab0c3..9f2c8a3 100644
--- a/include/basegfx/matrix/b2dhommatrix.hxx
+++ b/include/basegfx/matrix/b2dhommatrix.hxx
@@ -74,8 +74,10 @@
void rotate(double fRadiant);
void translate(double fX, double fY);
void translate(const B2DTuple& rTuple);
void scale(double fX, double fY);
void scale(const B2DTuple& rTuple);
// Shearing-Matrices
void shearX(double fSx);
diff --git a/include/basegfx/matrix/b3dhommatrix.hxx b/include/basegfx/matrix/b3dhommatrix.hxx
index 09d7005..6d5d5c4 100644
--- a/include/basegfx/matrix/b3dhommatrix.hxx
+++ b/include/basegfx/matrix/b3dhommatrix.hxx
@@ -64,12 +64,15 @@
/// Rotation
void rotate(double fAngleX,double fAngleY,double fAngleZ);
void rotate(const B3DTuple& rRotation);
/// Translation
void translate(double fX, double fY, double fZ);
void translate(const B3DTuple& rTranslation);
/// Scaling
void scale(double fX, double fY, double fZ);
void scale(const B3DTuple& rScale);
// Shearing-Matrices
void shearXY(double fSx, double fSy);
diff --git a/include/basegfx/matrix/b3dhommatrixtools.hxx b/include/basegfx/matrix/b3dhommatrixtools.hxx
new file mode 100755
index 0000000..3c5e8e8
--- /dev/null
+++ b/include/basegfx/matrix/b3dhommatrixtools.hxx
@@ -0,0 +1,46 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_BASEGFX_MATRIX_B3DHOMMATRIXTOOLS_HXX
#define INCLUDED_BASEGFX_MATRIX_B3DHOMMATRIXTOOLS_HXX
#include <sal/types.h>
#include <basegfx/matrix/b3dhommatrix.hxx>
#include <com/sun/star/drawing/HomogenMatrix.hpp>
namespace basegfx
{
namespace utils
{
/* tooling methods for converting API matrices (drawing::HomogenMatrix) to
B3DHomMatrix. drawing::HomogenMatrix4 is not used by OOo
*/
BASEGFX_DLLPUBLIC B3DHomMatrix UnoHomogenMatrixToB3DHomMatrix(
const com::sun::star::drawing::HomogenMatrix& rMatrixIn);
BASEGFX_DLLPUBLIC void B3DHomMatrixToUnoHomogenMatrix(
const B3DHomMatrix& rMatrixIn,
com::sun::star::drawing::HomogenMatrix& rMatrixOut);
} // end of namespace tools
} // end of namespace basegfx
#endif // INCLUDED_BASEGFX_MATRIX_B3DHOMMATRIXTOOLS_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/basegfx/numeric/ftools.hxx b/include/basegfx/numeric/ftools.hxx
index 52909c9..1ade3bb 100644
--- a/include/basegfx/numeric/ftools.hxx
+++ b/include/basegfx/numeric/ftools.hxx
@@ -153,6 +153,25 @@
*/
BASEGFX_DLLPUBLIC double snapToNearestMultiple(double v, const double fStep);
/** Snap v to the range [0.0 .. fWidth] using modulo
*/
double snapToZeroRange(double v, double fWidth);
/** Snap v to the range [fLow .. fHigh] using modulo
*/
double snapToRange(double v, double fLow, double fHigh);
/** return fValue with the sign of fSignCarrier, thus evtl. changed
*/
inline double copySign(double fValue, double fSignCarrier)
{
#ifdef WNT
return _copysign(fValue, fSignCarrier);
#else
return copysign(fValue, fSignCarrier);
#endif
}
/** RotateFlyFrame3: Normalize to range defined by [0.0 ... fRange[, independent
if v is positive or negative.
diff --git a/include/basegfx/range/b1drange.hxx b/include/basegfx/range/b1drange.hxx
index c1e35b1..7b0d228 100644
--- a/include/basegfx/range/b1drange.hxx
+++ b/include/basegfx/range/b1drange.hxx
@@ -141,6 +141,11 @@
maRange.intersect(rRange.maRange);
}
/// clamp value on range
double clamp(double fValue) const
{
return maRange.clamp(fValue);
}
};
} // end of namespace basegfx
diff --git a/include/basegfx/range/b2drange.hxx b/include/basegfx/range/b2drange.hxx
index 0de9dba..00eab63 100644
--- a/include/basegfx/range/b2drange.hxx
+++ b/include/basegfx/range/b2drange.hxx
@@ -274,8 +274,29 @@
maRangeY.grow(fValue);
}
/// clamp value on range
B2DTuple clamp(const B2DTuple& rTuple) const
{
return B2DTuple(
maRangeX.clamp(rTuple.getX()),
maRangeY.clamp(rTuple.getY()));
}
/** Transform Range by given transformation matrix. */
BASEGFX_DLLPUBLIC void transform(const B2DHomMatrix& rMatrix);
/** Transform Range by given transformation matrix.
This operation transforms the Range by transforming all four possible
extrema points (corners) of the given range and building a new one.
This means that the range will grow evtl. when a shear and/or rotation
is part of the transformation.
*/
B2DRange& operator*=( const ::basegfx::B2DHomMatrix& rMat );
/** Get a range filled with (0.0, 0.0, 1.0, 1.0) */
static const B2DRange& getUnitB2DRange();
private:
typedef ::basegfx::BasicRange< ValueType, TraitsType > MyBasicRange;
@@ -283,6 +304,10 @@
MyBasicRange maRangeY;
};
/** Transform B2DRange by given transformation matrix (see operator*=())
*/
B2DRange operator*( const B2DHomMatrix& rMat, const B2DRange& rB2DRange );
/** Round double to nearest integer for 2D range
@return the nearest integer for this range
diff --git a/include/basegfx/range/b2irange.hxx b/include/basegfx/range/b2irange.hxx
index 3d7d0ed..a8a95d6 100644
--- a/include/basegfx/range/b2irange.hxx
+++ b/include/basegfx/range/b2irange.hxx
@@ -208,6 +208,13 @@
maRangeY.intersect(rRange.maRangeY);
}
B2ITuple clamp(const B2ITuple& rTuple) const
{
return B2ITuple(
maRangeX.clamp(rTuple.getX()),
maRangeY.clamp(rTuple.getY()));
}
private:
typedef ::basegfx::BasicRange< ValueType, TraitsType > MyBasicRange;
diff --git a/include/basegfx/range/b3drange.hxx b/include/basegfx/range/b3drange.hxx
index 881dce6..e1c4439 100644
--- a/include/basegfx/range/b3drange.hxx
+++ b/include/basegfx/range/b3drange.hxx
@@ -195,9 +195,34 @@
maRangeZ.grow(fValue);
}
/// clamp value on range
B3DTuple clamp(const B3DTuple& rTuple) const
{
return B3DTuple(
maRangeX.clamp(rTuple.getX()),
maRangeY.clamp(rTuple.getY()),
maRangeZ.clamp(rTuple.getZ()));
}
BASEGFX_DLLPUBLIC void transform(const B3DHomMatrix& rMatrix);
/** Transform Range by given transformation matrix.
This operation transforms the Range by transforming all eight possible
extrema points (corners) of the given range and building a new one.
This means that the range will grow evtl. when a shear and/or rotation
is part of the transformation.
*/
B3DRange& operator*=( const ::basegfx::B3DHomMatrix& rMat );
/** Get a range filled with (0.0, 0.0, 0.0, 1.0, 1.0, 1.0) */
static const B3DRange& getUnitB3DRange();
};
/** Transform B3DRange by given transformation matrix (see operator*=())
*/
B3DRange operator*( const B3DHomMatrix& rMat, const B3DRange& rB2DRange );
} // end of namespace basegfx
diff --git a/include/basegfx/range/basicrange.hxx b/include/basegfx/range/basicrange.hxx
index bea40dd..17f31ea 100644
--- a/include/basegfx/range/basicrange.hxx
+++ b/include/basegfx/range/basicrange.hxx
@@ -248,6 +248,28 @@
}
}
T clamp(T nValue) const
{
if(isEmpty())
{
return nValue;
}
else
{
if(nValue < mnMinimum)
{
return mnMinimum;
}
if(nValue > mnMaximum)
{
return mnMaximum;
}
return nValue;
}
}
typename Traits::DifferenceType getRange() const
{
if(isEmpty())
diff --git a/include/filter/msfilter/msdffimp.hxx b/include/filter/msfilter/msdffimp.hxx
index ba8e689..fedce1b 100644
--- a/include/filter/msfilter/msdffimp.hxx
+++ b/include/filter/msfilter/msdffimp.hxx
@@ -697,17 +697,19 @@
void RemoveFromShapeOrder( SdrObject const * pObject ) const;
static SdrOle2Obj* CreateSdrOLEFromStorage( const OUString& rStorageName,
tools::SvRef<SotStorage> const & rSrcStorage,
const css::uno::Reference < css::embed::XStorage >& xDestStg,
const Graphic& rGraf,
const tools::Rectangle& rBoundRect,
const tools::Rectangle& rVisArea,
SvStream* pDataStrrm,
ErrCode& rError,
sal_uInt32 nConvertFlags,
sal_Int64 nAspect,
OUString const& rBaseURL);
static SdrOle2Obj* CreateSdrOLEFromStorage(
SdrModel& rSdrModel,
const OUString& rStorageName,
tools::SvRef<SotStorage> const & rSrcStorage,
const css::uno::Reference < css::embed::XStorage >& xDestStg,
const Graphic& rGraf,
const tools::Rectangle& rBoundRect,
const tools::Rectangle& rVisArea,
SvStream* pDataStrrm,
ErrCode& rError,
sal_uInt32 nConvertFlags,
sal_Int64 nAspect,
OUString const& rBaseURL);
/** Create connections between shapes.
This method should be called after a page is imported.
diff --git a/include/svx/connctrl.hxx b/include/svx/connctrl.hxx
index 360ff38..106140d 100644
--- a/include/svx/connctrl.hxx
+++ b/include/svx/connctrl.hxx
@@ -32,7 +32,7 @@
class SfxItemSet;
class SdrEdgeObj;
class SdrView;
class SdrObjList;
class SdrPage;
/*************************************************************************
|*
@@ -45,7 +45,7 @@
private:
SdrEdgeObj* pEdgeObj;
SdrObjList* pObjList;
SdrPage* pSdrPage;
const SdrView* pView;
SVX_DLLPRIVATE void SetStyles();
diff --git a/include/svx/cube3d.hxx b/include/svx/cube3d.hxx
index 4a74777..95acaab 100644
--- a/include/svx/cube3d.hxx
+++ b/include/svx/cube3d.hxx
@@ -54,17 +54,23 @@
// BOOLeans
bool bPosIsCenter : 1;
void SetDefaultAttributes(E3dDefaultAttributes& rDefault);
void SetDefaultAttributes(const E3dDefaultAttributes& rDefault);
virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact() override;
public:
E3dCubeObj(E3dDefaultAttributes& rDefault, const basegfx::B3DPoint& aPos, const basegfx::B3DVector& r3DSize);
E3dCubeObj();
E3dCubeObj(SdrModel& rSdrModel,
const E3dDefaultAttributes& rDefault,
const basegfx::B3DPoint& aPos,
const basegfx::B3DVector& r3DSize);
E3dCubeObj(SdrModel& rSdrModel);
virtual sal_uInt16 GetObjIdentifier() const override;
virtual SdrObject* DoConvertToPolyObj(bool bBezier, bool bAddText) const override;
virtual E3dCubeObj* Clone() const override;
virtual E3dCubeObj* Clone(SdrModel* pTargetModel = nullptr) const override;
// implemented mainly for the purposes of Clone()
E3dCubeObj& operator=(const E3dCubeObj& rObj);
// Set local parameters with geometry recreation
void SetCubePos(const basegfx::B3DPoint& rNew);
diff --git a/include/svx/deflt3d.hxx b/include/svx/deflt3d.hxx
index e69a62a..e08e994 100644
--- a/include/svx/deflt3d.hxx
+++ b/include/svx/deflt3d.hxx
@@ -65,13 +65,13 @@
void Reset();
// Cube object
const basegfx::B3DPoint& GetDefaultCubePos() { return aDefaultCubePos; }
const basegfx::B3DVector& GetDefaultCubeSize() { return aDefaultCubeSize; }
const basegfx::B3DPoint& GetDefaultCubePos() const { return aDefaultCubePos; }
const basegfx::B3DVector& GetDefaultCubeSize() const { return aDefaultCubeSize; }
bool GetDefaultCubePosIsCenter() const { return bDefaultCubePosIsCenter; }
// Sphere object
const basegfx::B3DPoint& GetDefaultSphereCenter() { return aDefaultSphereCenter; }
const basegfx::B3DVector& GetDefaultSphereSize() { return aDefaultSphereSize; }
const basegfx::B3DPoint& GetDefaultSphereCenter() const { return aDefaultSphereCenter; }
const basegfx::B3DVector& GetDefaultSphereSize() const { return aDefaultSphereSize; }
// Lathe object
bool GetDefaultLatheSmoothed() const { return bDefaultLatheSmoothed; }
diff --git a/include/svx/e3dsceneupdater.hxx b/include/svx/e3dsceneupdater.hxx
index ad01d66..e6800e8 100644
--- a/include/svx/e3dsceneupdater.hxx
+++ b/include/svx/e3dsceneupdater.hxx
@@ -50,7 +50,7 @@
// of the to-be-changed 3D object when the scene has a 3d transformation
// stack at construction time. In all other cases it's set to zero and
// no action needs to be taken
E3dScene* mpScene;
E3dScene* mpScene;
// the 3d transformation stack at the time of construction, valid when
// mpScene is not zero
@@ -58,7 +58,7 @@
public:
// the constructor evaluates and sets the members at construction time
E3DModifySceneSnapRectUpdater(const SdrObject* pObject);
E3DModifySceneSnapRectUpdater(const SdrObject* mpObject);
// the destructor will take action if mpScene is not zero and modify the
// 2D geomeztry of the target scene
diff --git a/include/svx/e3dundo.hxx b/include/svx/e3dundo.hxx
index 8be61b7..17335ea 100644
--- a/include/svx/e3dundo.hxx
+++ b/include/svx/e3dundo.hxx
@@ -31,17 +31,15 @@
\************************************************************************/
class SAL_WARN_UNUSED E3dUndoAction : public SdrUndoAction
{
protected:
E3dObject *pMy3DObj;
E3dObject& mrMy3DObj;
public:
E3dUndoAction (SdrModel *pModel,
E3dObject *p3DObj) :
SdrUndoAction (*pModel),
pMy3DObj (p3DObj)
{
}
E3dUndoAction(E3dObject &r3DObj)
: SdrUndoAction(r3DObj.getSdrModelFromSdrObject()),
mrMy3DObj(r3DObj)
{
}
virtual ~E3dUndoAction () override;
@@ -55,25 +53,25 @@
\************************************************************************/
class SAL_WARN_UNUSED E3dRotateUndoAction : public E3dUndoAction
{
basegfx::B3DHomMatrix aMyOldRotation;
basegfx::B3DHomMatrix aMyNewRotation;
private:
basegfx::B3DHomMatrix maMyOldRotation;
basegfx::B3DHomMatrix maMyNewRotation;
public:
E3dRotateUndoAction (SdrModel *pModel,
E3dObject *p3DObj,
const basegfx::B3DHomMatrix &aOldRotation,
const basegfx::B3DHomMatrix &aNewRotation) :
E3dUndoAction (pModel, p3DObj),
aMyOldRotation (aOldRotation),
aMyNewRotation (aNewRotation)
{
}
public:
E3dRotateUndoAction(
E3dObject& r3DObj,
const basegfx::B3DHomMatrix &aOldRotation,
const basegfx::B3DHomMatrix &aNewRotation)
: E3dUndoAction(r3DObj),
maMyOldRotation(aOldRotation),
maMyNewRotation(aNewRotation)
{
}
virtual ~E3dRotateUndoAction () override;
virtual ~E3dRotateUndoAction () override;
virtual void Undo() override;
virtual void Redo() override;
virtual void Undo() override;
virtual void Redo() override;
};
/************************************************************************\
@@ -83,16 +81,16 @@
\************************************************************************/
class SAL_WARN_UNUSED SVX_DLLPUBLIC E3dAttributesUndoAction : public SdrUndoAction
{
private:
using SdrUndoAction::Repeat;
SdrObject* pObject;
const SfxItemSet aNewSet;
const SfxItemSet aOldSet;
SdrObject& mrObject;
const SfxItemSet maNewSet;
const SfxItemSet maOldSet;
public:
E3dAttributesUndoAction( SdrModel &rModel,
E3dObject* pInObject,
E3dAttributesUndoAction(
E3dObject& rInObject,
const SfxItemSet& rNewSet,
const SfxItemSet& rOldSet);
diff --git a/include/svx/extedit.hxx b/include/svx/extedit.hxx
index 5ee2864..82afea2 100644
--- a/include/svx/extedit.hxx
+++ b/include/svx/extedit.hxx
@@ -43,18 +43,20 @@
class SdrObject;
class SAL_WARN_UNUSED SVX_DLLPUBLIC SdrExternalToolEdit
: public ExternalToolEdit
, public SfxListener
: public ExternalToolEdit
,public SfxListener
{
private:
FmFormView * m_pView;
SdrObject * m_pObj;
FmFormView* m_pView;
SdrObject* m_pObj;
SAL_DLLPRIVATE virtual void Update(Graphic&) override;
SAL_DLLPRIVATE virtual void Notify(SfxBroadcaster&, const SfxHint&) override;
public:
SdrExternalToolEdit(FmFormView * pView, SdrObject * pObj);
SdrExternalToolEdit(
FmFormView* pView,
SdrObject* pObj);
};
#endif
diff --git a/include/svx/extrud3d.hxx b/include/svx/extrud3d.hxx
index 1b78d45..5c12134 100644
--- a/include/svx/extrud3d.hxx
+++ b/include/svx/extrud3d.hxx
@@ -40,12 +40,15 @@
virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact() override;
virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties() override;
void SetDefaultAttributes(E3dDefaultAttributes const & rDefault);
void SetDefaultAttributes(const E3dDefaultAttributes& rDefault);
public:
E3dExtrudeObj(E3dDefaultAttributes const & rDefault, const basegfx::B2DPolyPolygon& rPP, double fDepth);
E3dExtrudeObj();
E3dExtrudeObj(
SdrModel& rSdrModel,
const E3dDefaultAttributes& rDefault,
const basegfx::B2DPolyPolygon& rPP,
double fDepth);
E3dExtrudeObj(SdrModel& rSdrModel);
// PercentDiagonal: 0..100, before 0.0..0.5
sal_uInt16 GetPercentDiagonal() const
@@ -81,7 +84,10 @@
virtual sal_uInt16 GetObjIdentifier() const override;
virtual E3dExtrudeObj* Clone() const override;
virtual E3dExtrudeObj* Clone(SdrModel* pTargetModel = nullptr) const override;
// implemented mainly for the purposes of Clone()
E3dExtrudeObj& operator=(const E3dExtrudeObj& rObj);
// TakeObjName...() is for the display in the UI (for example "3 frames selected")
virtual OUString TakeObjNameSingul() const override;
diff --git a/include/svx/fmpage.hxx b/include/svx/fmpage.hxx
index 808d814..2605a60 100644
--- a/include/svx/fmpage.hxx
+++ b/include/svx/fmpage.hxx
@@ -42,6 +42,7 @@
class SVX_DLLPUBLIC FmFormPage : public SdrPage
{
FmFormPage& operator=(const FmFormPage&) = delete;
FmFormPage(const FmFormPage&) = delete;
friend class FmFormObj;
std::unique_ptr<FmFormPageImpl> m_pImpl;
@@ -52,10 +53,7 @@
explicit FmFormPage(FmFormModel& rModel, bool bMasterPage=false);
virtual ~FmFormPage() override;
virtual void SetModel(SdrModel* pNewModel) override;
virtual SdrPage* Clone() const override;
virtual SdrPage* Clone(SdrModel* pNewModel) const override;
virtual SdrPage* Clone(SdrModel* pNewModel = nullptr) const override;
virtual void InsertObject(SdrObject* pObj, size_t nPos = SAL_MAX_SIZE) override;
@@ -75,9 +73,8 @@
const HelpEvent& rEvt );
protected:
FmFormPage(const FmFormPage& rPage);
void lateInit(const FmFormPage& rPage, FmFormModel* pNewModel = nullptr);
// lateInit -> copyValuesToClonedInstance (?)
void lateInit(const FmFormPage& rPage);
};
#endif // INCLUDED_SVX_FMPAGE_HXX
diff --git a/include/svx/fmview.hxx b/include/svx/fmview.hxx
index a424515..d0a7eb7 100644
--- a/include/svx/fmview.hxx
+++ b/include/svx/fmview.hxx
@@ -61,8 +61,10 @@
void Init();
public:
FmFormView(
SdrModel& rSdrModel,
OutputDevice* pOut);
FmFormView(FmFormModel* pModel, OutputDevice* pOut);
virtual ~FmFormView() override;
/** create a control pair (label/bound control) for the database field description given.
diff --git a/include/svx/graphctl.hxx b/include/svx/graphctl.hxx
index 85ecc62..f32454a 100644
--- a/include/svx/graphctl.hxx
+++ b/include/svx/graphctl.hxx
@@ -141,10 +141,13 @@
}
public:
GraphCtrlView(SdrModel* pModel, GraphCtrl* pWindow)
: SdrView(pModel, pWindow)
, rGraphCtrl(*pWindow)
{}
GraphCtrlView(
SdrModel& rSdrModel,
GraphCtrl* pWindow)
: SdrView(rSdrModel, pWindow)
,rGraphCtrl(*pWindow)
{
}
};
#endif // INCLUDED_SVX_GRAPHCTL_HXX
diff --git a/include/svx/lathe3d.hxx b/include/svx/lathe3d.hxx
index 3c5a0e2..89df103 100644
--- a/include/svx/lathe3d.hxx
+++ b/include/svx/lathe3d.hxx
@@ -39,11 +39,14 @@
virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact() override;
virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties() override;
void SetDefaultAttributes(E3dDefaultAttributes const & rDefault);
void SetDefaultAttributes(const E3dDefaultAttributes& rDefault);
public:
E3dLatheObj(E3dDefaultAttributes const & rDefault, const basegfx::B2DPolyPolygon& rPoly2D);
E3dLatheObj();
E3dLatheObj(
SdrModel& rSdrModel,
const E3dDefaultAttributes& rDefault,
const basegfx::B2DPolyPolygon& rPoly2D);
E3dLatheObj(SdrModel& rSdrModel);
// HorizontalSegments:
sal_uInt32 GetHorizontalSegments() const
@@ -87,7 +90,10 @@
virtual sal_uInt16 GetObjIdentifier() const override;
virtual E3dLatheObj* Clone() const override;
virtual E3dLatheObj* Clone(SdrModel* pTargetModel = nullptr) const override;
// implemented mainly for the purposes of Clone()
E3dLatheObj& operator=(const E3dLatheObj& rObj);
virtual SdrObject* DoConvertToPolyObj(bool bBezier, bool bAddText) const override;
diff --git a/include/svx/obj3d.hxx b/include/svx/obj3d.hxx
index 87117cc..7ad1884 100644
--- a/include/svx/obj3d.hxx
+++ b/include/svx/obj3d.hxx
@@ -81,6 +81,8 @@
E3dObjList();
SVX_DLLPUBLIC virtual ~E3dObjList() override;
virtual E3dObjList* CloneSdrObjList(SdrModel* pNewModel = nullptr) const override;
virtual void NbcInsertObject(SdrObject* pObj, size_t nPos=SAL_MAX_SIZE) override;
virtual void InsertObject(SdrObject* pObj, size_t nPos=SAL_MAX_SIZE) override;
virtual SdrObject* NbcRemoveObject(size_t nObjNum) override;
@@ -88,8 +90,7 @@
private:
E3dObjList &operator=(const E3dObjList& rSrcList) = delete;
SVX_DLLPUBLIC E3dObjList(const E3dObjList& rSrcList);
E3dObjList(const E3dObjList& rSrcList) = delete;
};
/*************************************************************************
@@ -131,7 +132,7 @@
// E3dObject is only a helper class (for E3DScene and E3DCompoundObject)
// and no instances should be created from anyone, so i move the constructors
// to protected area
E3dObject();
E3dObject(SdrModel& rSdrModel);
public:
virtual void RecalcSnapRect() override;
@@ -148,7 +149,6 @@
virtual void SetObjList(SdrObjList* pNewObjList) override;
virtual void SetPage(SdrPage* pNewPage) override;
virtual void SetModel(SdrModel* pNewModel) override;
virtual void NbcMove(const Size& rSize) override;
virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact) override;
virtual SdrObjList* GetSubList() const override;
@@ -183,7 +183,7 @@
// TakeObjName...() is for the display in the UI, for example "3 frames selected".
virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override;
virtual E3dObject* Clone() const override;
virtual E3dObject* Clone(SdrModel* pTargetModel = nullptr) const override;
E3dObject& operator=( const E3dObject& rObj );
virtual SdrObjGeoData *NewGeoData() const override;
@@ -232,7 +232,7 @@
public:
E3dCompoundObject();
E3dCompoundObject(SdrModel& rSdrModel);
virtual ~E3dCompoundObject() override;
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override;
@@ -242,7 +242,10 @@
virtual sal_uInt16 GetObjIdentifier() const override;
virtual void RecalcSnapRect() override;
virtual E3dCompoundObject* Clone() const override;
virtual E3dCompoundObject* Clone(SdrModel* pTargetModel = nullptr) const override;
// implemented mainly for the purposes of Clone()
E3dCompoundObject& operator=(const E3dCompoundObject& rObj);
bool IsAOrdNumRemapCandidate(E3dScene*& prScene) const;
};
diff --git a/include/svx/polygn3d.hxx b/include/svx/polygn3d.hxx
index 98778dd..9f5acca 100644
--- a/include/svx/polygn3d.hxx
+++ b/include/svx/polygn3d.hxx
@@ -43,10 +43,11 @@
void SetPolyNormals3D(const basegfx::B3DPolyPolygon& rNewPolyPoly3D);
void SetPolyTexture2D(const basegfx::B2DPolyPolygon& rNewPolyPoly2D);
E3dPolygonObj(
SdrModel& rSdrModel,
const basegfx::B3DPolyPolygon& rPolyPoly3D);
E3dPolygonObj(SdrModel& rSdrModel);
E3dPolygonObj(const basegfx::B3DPolyPolygon& rPolyPoly3D);
E3dPolygonObj();
virtual ~E3dPolygonObj() override;
const basegfx::B3DPolyPolygon& GetPolyPolygon3D() const { return aPolyPoly3D; }
@@ -56,7 +57,10 @@
virtual sal_uInt16 GetObjIdentifier() const override;
virtual SdrObject* DoConvertToPolyObj(bool bBezier, bool bAddText) const override;
virtual E3dPolygonObj* Clone() const override;
virtual E3dPolygonObj* Clone(SdrModel* pTargetModel = nullptr) const override;
// implemented mainly for the purposes of Clone()
E3dPolygonObj& operator=(const E3dPolygonObj& rObj);
// LineOnly?
bool GetLineOnly() const { return bLineOnly; }
diff --git a/include/svx/scene3d.hxx b/include/svx/scene3d.hxx
index b656209..eef2c04 100644
--- a/include/svx/scene3d.hxx
+++ b/include/svx/scene3d.hxx
@@ -90,7 +90,7 @@
void ImpCleanup3DDepthMapper();
public:
E3dScene();
E3dScene(SdrModel& rSdrModel);
virtual ~E3dScene() override;
virtual void SetBoundRectDirty() override;
@@ -130,7 +130,7 @@
const Camera3D& GetCamera() const { return aCamera; }
void removeAllNonSelectedObjects();
virtual E3dScene* Clone() const override;
virtual E3dScene* Clone(SdrModel* pTargetModel = nullptr) const override;
E3dScene& operator=(const E3dScene&);
virtual SdrObjGeoData *NewGeoData() const override;
diff --git a/include/svx/sdr/properties/defaultproperties.hxx b/include/svx/sdr/properties/defaultproperties.hxx
index fec5963..b339538 100644
--- a/include/svx/sdr/properties/defaultproperties.hxx
+++ b/include/svx/sdr/properties/defaultproperties.hxx
@@ -54,6 +54,9 @@
// react on ItemSet changes
virtual void ItemSetChanged(const SfxItemSet& rSet) override;
// check if SfxItemSet exists
bool HasSfxItemSet() const { return bool(mpItemSet); }
public:
// basic constructor
explicit DefaultProperties(SdrObject& rObj);
diff --git a/include/svx/sdr/properties/properties.hxx b/include/svx/sdr/properties/properties.hxx
index 71dad7f..3bfca76 100644
--- a/include/svx/sdr/properties/properties.hxx
+++ b/include/svx/sdr/properties/properties.hxx
@@ -44,6 +44,32 @@
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// BaseProperties
// DefaultProperties ->SfxItemSet
// AttributeProperties ->SfxStyleSheet
// E3dProperties
// E3dCompoundProperties
// E3dExtrudeProperties
// E3dLatheProperties
// E3dSphereProperties
// E3dSceneProperties
// TextProperties ->maVersion
// ConnectorProperties
// CustomShapeProperties
// MeasureProperties
// RectangleProperties
// CaptionProperties
// CircleProperties
// GraphicProperties
// OleProperties
// CellProperties
// TableProperties
// GroupProperties
// EmptyProperties
// PageProperties
namespace sdr
{
namespace properties
@@ -141,13 +167,6 @@
// Get the installed StyleSheet.
virtual SfxStyleSheet* GetStyleSheet() const = 0;
// Move local items to a new ItemPool.
// Override this to do it for hierarchical objects like e.g. groups.
virtual void MoveToItemPool(SfxItemPool* pSrcPool, SfxItemPool* pDestPool, SdrModel* pNewModel);
// Set new model.
virtual void SetModel(SdrModel* pOldModel, SdrModel* pNewModel);
// force all attributes which come from styles to hard attributes
// to be able to live without the style.
virtual void ForceStyleToHardAttributes();
diff --git a/include/svx/sdr/table/tablecontroller.hxx b/include/svx/sdr/table/tablecontroller.hxx
index 6a999a7..fe03d73 100644
--- a/include/svx/sdr/table/tablecontroller.hxx
+++ b/include/svx/sdr/table/tablecontroller.hxx
@@ -29,7 +29,7 @@
#include <svx/svdotable.hxx>
#include <svx/svdview.hxx>
class SdrObjEditView;
class SdrView;
class SdrObject;
class SfxItemSet;
class SvxBoxInfoItem;
@@ -39,10 +39,12 @@
class TableModel;
class SVX_DLLPUBLIC SvxTableController: public sdr::SelectionController
class SVX_DLLPUBLIC SvxTableController : public sdr::SelectionController
{
public:
SVX_DLLPRIVATE SvxTableController( SdrObjEditView* pView, const SdrTableObj* pObj );
SVX_DLLPRIVATE SvxTableController(
SdrView& rView,
const SdrTableObj& rObj);
SVX_DLLPRIVATE virtual ~SvxTableController() override;
// from sdr::SelectionController
@@ -76,7 +78,10 @@
SVX_DLLPRIVATE void DistributeRows();
SVX_DLLPRIVATE void SetVertical( sal_uInt16 nSId );
SVX_DLLPRIVATE static rtl::Reference< sdr::SelectionController > create( SdrObjEditView* pView, const SdrTableObj* pObj, const rtl::Reference< sdr::SelectionController >& xRefController );
SVX_DLLPRIVATE static rtl::Reference< sdr::SelectionController > create(
SdrView& rView,
const SdrTableObj& rObj,
const rtl::Reference< sdr::SelectionController >& xRefController);
SVX_DLLPRIVATE void MergeAttrFromSelectedCells(SfxItemSet& rAttr, bool bOnlyHardAttr) const;
SVX_DLLPRIVATE void SetAttrToSelectedCells(const SfxItemSet& rAttr, bool bReplaceAll);
@@ -93,7 +98,7 @@
SVX_DLLPRIVATE virtual bool GetMarkedObjModel( SdrPage* pNewPage ) override;
SVX_DLLPRIVATE virtual bool PasteObjModel( const SdrModel& rModel ) override;
SVX_DLLPRIVATE virtual bool hasSelectedCells() const override { return mbCellSelectionMode || mpView->IsTextEdit(); }
SVX_DLLPRIVATE virtual bool hasSelectedCells() const override { return mbCellSelectionMode || mrView.IsTextEdit(); }
/// @see sdr::SelectionController::setCursorLogicPosition().
SVX_DLLPRIVATE virtual bool setCursorLogicPosition(const Point& rPosition, bool bPoint) override;
@@ -174,17 +179,16 @@
CellPos maMouseDownPos;
bool mbLeftButtonDown;
sdr::overlay::OverlayObjectList* mpSelectionOverlay;
SdrView* mpView;
SdrView& mrView;
tools::WeakReference<SdrTableObj> mxTableObj;
SdrModel* mpModel;
css::uno::Reference< css::util::XModifyListener > mxModifyListener;
ImplSVEvent * mnUpdateEvent;
};
rtl::Reference< sdr::SelectionController > CreateTableController( SdrObjEditView* pView, const SdrTableObj* pObj, const rtl::Reference< sdr::SelectionController >& xRefController );
rtl::Reference< sdr::SelectionController > CreateTableController(
SdrView& rView,
const SdrTableObj& rObj,
const rtl::Reference< sdr::SelectionController >& xRefController );
} }
diff --git a/include/svx/sphere3d.hxx b/include/svx/sphere3d.hxx
index 9c4bc5d2..e5534e5 100644
--- a/include/svx/sphere3d.hxx
+++ b/include/svx/sphere3d.hxx
@@ -35,16 +35,19 @@
virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact() override;
virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties() override;
void SetDefaultAttributes(E3dDefaultAttributes& rDefault);
void SetDefaultAttributes(const E3dDefaultAttributes& rDefault);
public:
E3dSphereObj(E3dDefaultAttributes& rDefault, const basegfx::B3DPoint& rCenter, const basegfx::B3DVector& r3DSize);
E3dSphereObj(
SdrModel& rSdrModel,
const E3dDefaultAttributes& rDefault,
const basegfx::B3DPoint& rCenter,
const basegfx::B3DVector& r3DSize);
// FG: This constructor is only called from MakeObject from the 3d-Objectfactory
// when a document with a sphere is loaded. This constructor does not call
// CreateSphere, or create any spheres.
enum Dummy { DUMMY };
E3dSphereObj(Dummy dummy);
E3dSphereObj(SdrModel& rSdrModel);
// horizontal segments:
sal_uInt32 GetHorizontalSegments() const
@@ -57,7 +60,10 @@
virtual sal_uInt16 GetObjIdentifier() const override;
virtual SdrObject* DoConvertToPolyObj(bool bBezier, bool bAddText) const override;
virtual E3dSphereObj* Clone() const override;
virtual E3dSphereObj* Clone(SdrModel* pTargetModel = nullptr) const override;
// implemented mainly for the purposes of Clone()
E3dSphereObj& operator=(const E3dSphereObj& rObj);
const basegfx::B3DPoint& Center() const { return aCenter; }
const basegfx::B3DVector& Size() const { return aSize; }
diff --git a/include/svx/svdcrtv.hxx b/include/svx/svdcrtv.hxx
index 3b71a50..47858b2 100644
--- a/include/svx/svdcrtv.hxx
+++ b/include/svx/svdcrtv.hxx
@@ -31,7 +31,7 @@
class ImplConnectMarkerOverlay;
class ImpSdrCreateViewExtraData;
class SVX_DLLPUBLIC SdrCreateView: public SdrDragView
class SVX_DLLPUBLIC SdrCreateView : public SdrDragView
{
friend class SdrPageView;
@@ -69,7 +69,10 @@
protected:
// #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView
SdrCreateView(SdrModel* pModel1, OutputDevice* pOut);
SdrCreateView(
SdrModel& rSdrModel,
OutputDevice* pOut);
virtual ~SdrCreateView() override;
public:
diff --git a/include/svx/svddrgv.hxx b/include/svx/svddrgv.hxx
index 19b5641..180d8cc 100644
--- a/include/svx/svddrgv.hxx
+++ b/include/svx/svddrgv.hxx
@@ -25,7 +25,7 @@
class SdrUndoGeoObj;
class SVX_DLLPUBLIC SdrDragView: public SdrExchangeView
class SVX_DLLPUBLIC SdrDragView : public SdrExchangeView
{
friend class SdrPageView;
friend class SdrDragMethod;
@@ -69,7 +69,10 @@
protected:
// #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView
SdrDragView(SdrModel* pModel1, OutputDevice* pOut);
SdrDragView(
SdrModel& rSdrModel,
OutputDevice* pOut);
virtual ~SdrDragView() override;
public:
diff --git a/include/svx/svdedtv.hxx b/include/svx/svdedtv.hxx
index 0c1e2f6..51dbb48 100644
--- a/include/svx/svdedtv.hxx
+++ b/include/svx/svdedtv.hxx
@@ -68,7 +68,7 @@
template<> struct typed_flags<SdrInsertFlags> : is_typed_flags<SdrInsertFlags, 0x1f> {};
}
class SVX_DLLPUBLIC SdrEditView: public SdrMarkView
class SVX_DLLPUBLIC SdrEditView : public SdrMarkView
{
friend class SdrPageView;
friend class SdrDragDistort;
@@ -163,7 +163,10 @@
protected:
// #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView
SdrEditView(SdrModel* pModel1, OutputDevice* pOut);
SdrEditView(
SdrModel& rSdrModel,
OutputDevice* pOut);
virtual ~SdrEditView() override;
public:
diff --git a/include/svx/svdedxv.hxx b/include/svx/svdedxv.hxx
index 324a611..70472aa 100644
--- a/include/svx/svdedxv.hxx
+++ b/include/svx/svdedxv.hxx
@@ -58,7 +58,7 @@
// - macromod
class SVX_DLLPUBLIC SdrObjEditView: public SdrGlueEditView, public EditViewCallbacks
class SVX_DLLPUBLIC SdrObjEditView : public SdrGlueEditView, public EditViewCallbacks
{
friend class SdrPageView;
friend class ImpSdrEditPara;
@@ -150,7 +150,10 @@
protected:
// #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView
SdrObjEditView(SdrModel* pModel1, OutputDevice* pOut);
SdrObjEditView(
SdrModel& rSdrModel,
OutputDevice* pOut);
virtual ~SdrObjEditView() override;
public:
diff --git a/include/svx/svdglev.hxx b/include/svx/svdglev.hxx
index 10645f0..be365e3 100644
--- a/include/svx/svdglev.hxx
+++ b/include/svx/svdglev.hxx
@@ -29,7 +29,7 @@
// Edit GluePoints at the objects (GluePoints for connector)
class SVX_DLLPUBLIC SdrGlueEditView: public SdrPolyEditView
class SVX_DLLPUBLIC SdrGlueEditView : public SdrPolyEditView
{
// copy marked GluePoints and mark instead of the old ones
void ImpCopyMarkedGluePoints();
@@ -40,7 +40,10 @@
protected:
// #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView
SdrGlueEditView(SdrModel* pModel1, OutputDevice* pOut);
SdrGlueEditView(
SdrModel& rSdrModel,
OutputDevice* pOut);
virtual ~SdrGlueEditView() override;
public:
diff --git a/include/svx/svdmrkv.hxx b/include/svx/svdmrkv.hxx
index 981b1e2..36e8041 100644
--- a/include/svx/svdmrkv.hxx
+++ b/include/svx/svdmrkv.hxx
@@ -166,7 +166,10 @@
protected:
// #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView
SdrMarkView(SdrModel* pModel1, OutputDevice* pOut);
SdrMarkView(
SdrModel& rSdrModel,
OutputDevice* pOut);
virtual ~SdrMarkView() override;
public:
diff --git a/include/svx/svdoashp.hxx b/include/svx/svdoashp.hxx
index 85f5e9d..3ce7833 100644
--- a/include/svx/svdoashp.hxx
+++ b/include/svx/svdoashp.hxx
@@ -98,15 +98,8 @@
css::uno::Reference< css::drawing::XCustomShapeEngine > const & GetCustomShapeEngine() const;
// SVX_DLLPRIVATE css::uno::Sequence< css::uno::Reference< css::drawing::XCustomShapeHandle > >
// SdrObjCustomShape::GetInteraction( const SdrObjCustomShape* pCustomShape ) const;
// #i47293#
// SVX_DLLPRIVATE std::vector< css::uno::Reference< css::drawing::XCustomShapeHandle > > GetFixedInteractionHandle() const;
SVX_DLLPRIVATE std::vector< SdrCustomShapeInteraction > GetInteractionHandles() const;
SVX_DLLPRIVATE void DragCreateObject( SdrDragStat& rDrag );
SVX_DLLPRIVATE void DragResizeCustomShape( const tools::Rectangle& rNewRect );
SVX_DLLPRIVATE void DragMoveCustomShapeHdl( const Point& rDestination,
const sal_uInt16 nCustomShapeHdlNum, bool bMoveCalloutRectangle );
@@ -147,7 +140,7 @@
double GetObjectRotation() const { return fObjectRotation;}
double GetExtraTextRotation( const bool bPreRotation = false ) const;
SdrObjCustomShape();
SdrObjCustomShape(SdrModel& rSdrModel);
virtual ~SdrObjCustomShape() override;
/* is merging default attributes from type-shape into the SdrCustomShapeGeometryItem. If pType
@@ -172,8 +165,6 @@
virtual sal_uInt16 GetObjIdentifier() const override;
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
virtual void SetModel(SdrModel* pNewModel) override;
virtual void Move(const Size& rSiz) override;
virtual void Shear(const Point& rRef, long nAngle, double tn, bool bVShear) override;
virtual void SetSnapRect(const tools::Rectangle& rRect) override;
@@ -216,7 +207,7 @@
virtual void TakeTextAnchorRect( tools::Rectangle& rAnchorRect ) const override;
virtual void TakeTextRect( SdrOutliner& rOutliner, tools::Rectangle& rTextRect, bool bNoEditText,
tools::Rectangle* pAnchorRect, bool bLineWidth = true ) const override;
virtual SdrObjCustomShape* Clone() const override;
virtual SdrObjCustomShape* Clone(SdrModel* pTargetModel = nullptr) const override;
SdrObjCustomShape& operator=(const SdrObjCustomShape& rObj);
virtual OUString TakeObjNameSingul() const override;
diff --git a/include/svx/svdoattr.hxx b/include/svx/svdoattr.hxx
index 10c163b..a39a919 100644
--- a/include/svx/svdoattr.hxx
+++ b/include/svx/svdoattr.hxx
@@ -28,20 +28,14 @@
#include <svx/svdattr.hxx>
#include <svx/svxdllapi.h>
// Initial Declarations
class SfxPoolItem;
class SfxSetItem;
class SdrOutliner;
class SfxItemSet;
class SfxItemPool;
// SdrAttrObj
class SVX_DLLPUBLIC SdrAttrObj : public SdrObject
{
private:
@@ -59,7 +53,7 @@
/// Detects when a stylesheet is changed
virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) override;
SdrAttrObj();
SdrAttrObj(SdrModel& rSdrModel);
virtual ~SdrAttrObj() override;
public:
@@ -71,8 +65,6 @@
bool HasLine() const;
virtual const tools::Rectangle& GetSnapRect() const override;
virtual void SetModel(SdrModel* pNewModel) override;
};
diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx
index 3f01cbb8..7d03360 100644
--- a/include/svx/svdobj.hxx
+++ b/include/svx/svdobj.hxx
@@ -74,10 +74,11 @@
class OutputDevice;
class Fraction;
namespace basegfx {
class B2DPoint;
class B2DPolyPolygon;
class B2DHomMatrix;
namespace basegfx
{
class B2DPoint;
class B2DPolyPolygon;
class B2DHomMatrix;
}
namespace sdr
@@ -103,6 +104,8 @@
class PropertyChangeNotifier;
}
class SvxShape;
enum SdrObjKind {
OBJ_NONE = 0, /// abstract object (SdrObject)
OBJ_GRUP = 1, /// object group
@@ -265,9 +268,45 @@
SdrObjTransformInfoRec();
};
/// Abstract DrawObject
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// SdrObject
// SdrAttrObj
// E3dObject
// E3dCompoundObject
// E3dCubeObj
// E3dExtrudeObj
// E3dLatheObj
// E3dPolygonObj
// E3dSphereObj
// E3dScene
// SdrTextObj
// SdrObjCustomShape
// OCustomShape
// SdrEdgeObj
// SdrMeasureObj
// SdrPathObj
// SdrRectObj
// SdrCaptionObj
// SdrCircObj
// SdrGrafObj
// SdrMediaObj
// SdrOle2Obj
// OOle2Obj
// SdrUnoObj
// DlgEdObj
// DlgEdForm
// OUnoObject
// FmFormObj
// SdrTableObj
// SdrObjGroup
// SdrPageObj
// SdrVirtObj
// SwDrawVirtObj
// SwVirtFlyDrawObj
// SwFlyDrawObj
class SvxShape;
/// Abstract DrawObject
class SVX_DLLPUBLIC SdrObject: public SfxListener, public virtual tools::WeakBase
{
private:
@@ -296,8 +335,16 @@
public:
const SdrObject* getFillGeometryDefiningShape() const { return mpFillGeometryDefiningShape; }
private:
// the SdrModel this objects was created with, unchanged during SdrObject lifetime
SdrModel& mrSdrModelFromSdrObject;
public:
SdrObject();
// A SdrObject always needs a SdrModel for lifetime (Pool, ...)
SdrObject(SdrModel& rSdrModel);
// SdrModel access on SdrObject level
SdrModel& getSdrModelFromSdrObject() const { return mrSdrModelFromSdrObject; }
void AddObjectUser(sdr::ObjectUser& rNewUser);
void RemoveObjectUser(sdr::ObjectUser& rOldUser);
@@ -341,9 +388,6 @@
virtual void SetPage(SdrPage* pNewPage);
SdrPage* GetPage() const { return pPage;}
virtual void SetModel(SdrModel* pNewModel);
SdrModel* GetModel() const { return pModel;}
SfxItemPool & GetObjectItemPool() const;
void AddListener(SfxListener& rListener);
@@ -438,7 +482,7 @@
// Returns a copy of the object. Every inherited class must reimplement this (in class Foo
// it should be sufficient to do "virtual Foo* Clone() const { return CloneHelper< Foo >(); }".
// Note that this function uses operator= internally.
virtual SdrObject* Clone() const;
virtual SdrObject* Clone(SdrModel* pTargetModel = nullptr) const;
// implemented mainly for the purposes of Clone()
SdrObject& operator=(const SdrObject& rObj);
@@ -724,7 +768,9 @@
// when there is no filled new polygon created from line-to-polygon conversion,
// specially used for XLINE_DASH and 3D conversion
SdrObject* ConvertToContourObj(SdrObject* pRet, bool bForceLineDash = false) const;
static SdrObject* ImpConvertToContourObj(SdrObject* pRet, bool bForceLineDash);
private:
SdrObject* ImpConvertToContourObj(bool bForceLineDash);
public:
// if true, reference onto an object
bool IsVirtualObj() const { return bVirtObj;}
@@ -762,9 +808,6 @@
// removes the record from the list and performs delete (FreeMem+Dtor).
void DeleteUserData(sal_uInt16 nNum);
// switch ItemPool for this object
void MigrateItemPool(SfxItemPool* pSrcPool, SfxItemPool* pDestPool, SdrModel* pNewModel);
// access to the UNO representation of the shape
virtual css::uno::Reference< css::uno::XInterface > getUnoShape();
@@ -867,7 +910,6 @@
tools::Rectangle aOutRect; // surrounding rectangle for Paint (incl. LineWdt, ...)
Point aAnchor; // anchor position (Writer)
SdrPage* pPage;
SdrModel* pModel;
SdrObjUserCall* pUserCall;
std::unique_ptr<SdrObjPlusData>
pPlusData; // Broadcaster, UserData, connectors, ... (this is the Bitsack)
@@ -909,7 +951,6 @@
void ImpForcePlusData();
OUString GetAngleStr(long nAngle) const;
OUString GetMetrStr(long nVal) const;
/// A derived class must override these 3 methods if it has own geometric
@@ -945,7 +986,7 @@
virtual void impl_setUnoShape( const css::uno::Reference< css::uno::XInterface >& _rxUnoShape );
// helper function for reimplementing Clone().
template< typename T > T* CloneHelper() const;
template< typename T > T* CloneHelper(SdrModel* pTargetModel) const;
private:
struct Impl;
@@ -1006,6 +1047,7 @@
{
SdrInventor nInventor;
sal_uInt16 nObjIdentifier;
SdrModel& rSdrModel;
};
/**
@@ -1019,23 +1061,40 @@
class SVX_DLLPUBLIC SdrObjFactory
{
public:
static SdrObject* MakeNewObject(SdrInventor nInventor, sal_uInt16 nObjIdentifier, SdrPage* pPage, SdrModel* pModel=nullptr);
static SdrObject* MakeNewObject(SdrInventor nInventor, sal_uInt16 nObjIdentifier, const tools::Rectangle& rSnapRect, SdrPage* pPage);
static SdrObject* MakeNewObject(
SdrModel& rSdrModel,
SdrInventor nInventor,
sal_uInt16 nObjIdentifier,
SdrPage* pPage = nullptr,
const tools::Rectangle* pSnapRect = nullptr);
static void InsertMakeObjectHdl(Link<SdrObjCreatorParams, SdrObject*> const & rLink);
static void RemoveMakeObjectHdl(Link<SdrObjCreatorParams, SdrObject*> const & rLink);
private:
static SVX_DLLPRIVATE SdrObject* CreateObjectFromFactory( SdrInventor nInventor, sal_uInt16 nIdentifier );
static SVX_DLLPRIVATE SdrObject* CreateObjectFromFactory(
SdrModel& rSdrModel,
SdrInventor nInventor,
sal_uInt16 nIdentifier);
SdrObjFactory() = delete;
};
template< typename T > T* SdrObject::CloneHelper() const
template< typename T > T* SdrObject::CloneHelper(SdrModel* pTargetModel) const
{
OSL_ASSERT( typeid( T ) == typeid( *this ));
T* pObj = dynamic_cast< T* >( SdrObjFactory::MakeNewObject(GetObjInventor(),GetObjIdentifier(),nullptr));
if (pObj!=nullptr)
*pObj=*static_cast< const T* >( this );
T* pObj = dynamic_cast< T* >(
SdrObjFactory::MakeNewObject(
nullptr == pTargetModel ? getSdrModelFromSdrObject() : *pTargetModel,
GetObjInventor(),
GetObjIdentifier()));
if(nullptr != pObj)
{
// use ::operator=()
*pObj = *static_cast< const T* >( this );
}
return pObj;
}
diff --git a/include/svx/svdocapt.hxx b/include/svx/svdocapt.hxx
index 3dd6829..baa0e039 100644
--- a/include/svx/svdocapt.hxx
+++ b/include/svx/svdocapt.hxx
@@ -25,28 +25,20 @@
// Forward Declarations
class ImpCaptParams;
namespace sdr { namespace properties {
class CaptionProperties;
}}
// Helper Class SdrCaptObjGeoData
class SdrCaptObjGeoData : public SdrTextObjGeoData
{
public:
tools::Polygon aTailPoly;
};
// SdrCaptionObj
class SVX_DLLPUBLIC SdrCaptionObj : public SdrRectObj
{
private:
@@ -73,13 +65,20 @@
SVX_DLLPRIVATE void ImpRecalcTail();
public:
SdrCaptionObj();
SdrCaptionObj(const tools::Rectangle& rRect, const Point& rTail);
SdrCaptionObj(SdrModel& rSdrModel);
SdrCaptionObj(
SdrModel& rSdrModel,
const tools::Rectangle& rRect,
const Point& rTail);
virtual ~SdrCaptionObj() override;
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
virtual sal_uInt16 GetObjIdentifier() const override;
virtual SdrCaptionObj* Clone() const override;
virtual SdrCaptionObj* Clone(SdrModel* pTargetModel = nullptr) const override;
// implemented mainly for the purposes of Clone()
SdrCaptionObj& operator=(const SdrCaptionObj& rObj);
// for calc: special shadow only for text box
void SetSpecialTextBoxShadow() { mbSpecialTextBoxShadow = true; }
@@ -92,7 +91,6 @@
virtual OUString TakeObjNamePlural() const override;
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override;
virtual void SetModel(SdrModel* pNewModel) override;
virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) override;
virtual sal_uInt32 GetHdlCount() const override;
diff --git a/include/svx/svdocirc.hxx b/include/svx/svdocirc.hxx
index d3bc9c2..fc30455 100644
--- a/include/svx/svdocirc.hxx
+++ b/include/svx/svdocirc.hxx
@@ -66,14 +66,25 @@
virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) override;
public:
SdrCircObj(SdrObjKind eNewKind); // Circ, CArc, Sect or CCut
SdrCircObj(SdrObjKind eNewKind, const tools::Rectangle& rRect);
SdrCircObj(
SdrModel& rSdrModel,
SdrObjKind eNewKind); // Circ, CArc, Sect or CCut
SdrCircObj(
SdrModel& rSdrModel,
SdrObjKind eNewKind,
const tools::Rectangle& rRect);
// 0=0.00Deg=3h 9000=90.00Deg=12h 18000=180.00Deg=9h 27000=270.00Deg=6h
// The circle is build up from StartAngle to EndWink anti-clockwise.
// If nNewStartAngle==nNewEndWink, then arc has an angle of 0 degrees.
// If nNewStartAngle+36000==nNewEndWink, then the arc has angle of 360 degrees.
SdrCircObj(SdrObjKind eNewKind, const tools::Rectangle& rRect, long nNewStartAngle, long nNewEndWink);
SdrCircObj(
SdrModel& rSdrModel,
SdrObjKind eNewKind,
const tools::Rectangle& rRect,
long nNewStartAngle,
long nNewEndWink);
virtual ~SdrCircObj() override;
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
@@ -83,7 +94,11 @@
virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override;
virtual SdrCircObj* Clone() const override;
virtual SdrCircObj* Clone(SdrModel* pTargetModel = nullptr) const override;
// implemented mainly for the purposes of Clone()
SdrCircObj& operator=(const SdrCircObj& rObj);
virtual void RecalcSnapRect() override;
virtual void NbcSetSnapRect(const tools::Rectangle& rRect) override;
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override;
diff --git a/include/svx/svdoedge.hxx b/include/svx/svdoedge.hxx
index 5b11da0..ae28ad7 100644
--- a/include/svx/svdoedge.hxx
+++ b/include/svx/svdoedge.hxx
@@ -187,8 +187,7 @@
void ImpSetEdgeInfoToAttr(); // copying values from the aEdgeInfo to the pool
public:
SdrEdgeObj();
SdrEdgeObj(SdrModel& rSdrModel);
virtual ~SdrEdgeObj() override;
SdrObjConnection& GetConnection(bool bTail1) { return *(bTail1 ? &aCon1 : &aCon2); }
@@ -214,7 +213,7 @@
virtual void RecalcSnapRect() override;
virtual void TakeUnrotatedSnapRect(tools::Rectangle& rRect) const override;
virtual SdrEdgeObj* Clone() const override;
virtual SdrEdgeObj* Clone(SdrModel* pTargetModel = nullptr) const override;
SdrEdgeObj& operator=(const SdrEdgeObj& rObj);
virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override;
diff --git a/include/svx/svdograf.hxx b/include/svx/svdograf.hxx
index 65b9348..d11a289 100644
--- a/include/svx/svdograf.hxx
+++ b/include/svx/svdograf.hxx
@@ -129,10 +129,16 @@
public:
SdrGrafObj();
SdrGrafObj(const Graphic& rGrf);
SdrGrafObj(const Graphic& rGrf, const tools::Rectangle& rRect);
virtual ~SdrGrafObj() override;
SdrGrafObj(SdrModel& rSdrModel);
SdrGrafObj(
SdrModel& rSdrModel,
const Graphic& rGrf);
SdrGrafObj(
SdrModel& rSdrModel,
const Graphic& rGrf,
const tools::Rectangle& rRect);
virtual ~SdrGrafObj() override;
void SetGraphicObject( const GraphicObject& rGrfObj );
const GraphicObject& GetGraphicObject(bool bForceSwapIn = false) const;
@@ -143,9 +149,7 @@
const Graphic& GetGraphic() const;
Graphic GetTransformedGraphic( SdrGrafObjTransformsAttrs nTransformFlags = SdrGrafObjTransformsAttrs::ALL ) const;
GraphicType GetGraphicType() const;
GraphicAttr GetGraphicAttr( SdrGrafObjTransformsAttrs nTransformFlags = SdrGrafObjTransformsAttrs::ALL ) const;
// Keep ATM for SD.
@@ -182,7 +186,7 @@
// #i25616#
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override;
virtual SdrGrafObj* Clone() const override;
virtual SdrGrafObj* Clone(SdrModel* pTargetModel = nullptr) const override;
SdrGrafObj& operator=(const SdrGrafObj& rObj);
virtual sal_uInt32 GetHdlCount() const override;
@@ -197,7 +201,6 @@
bool HasGDIMetaFile() const;
virtual void SetPage(SdrPage* pNewPage) override;
virtual void SetModel(SdrModel* pNewModel) override;
bool isEmbeddedVectorGraphicData() const;
GDIMetaFile getMetafileFromEmbeddedVectorGraphicData() const;
diff --git a/include/svx/svdogrp.hxx b/include/svx/svdogrp.hxx
index f15a9b9..7f0fb234 100644
--- a/include/svx/svdogrp.hxx
+++ b/include/svx/svdogrp.hxx
@@ -23,30 +23,23 @@
#include <memory>
#include <svx/svdobj.hxx>
#include <svx/svxdllapi.h>
#include <svx/svdpage.hxx>
// Forward declarations
class SdrObjList;
class SdrObjListIter;
class SfxItemSet;
// SdrObjGroup
class SVX_DLLPUBLIC SdrObjGroup final : public SdrObject
{
private:
virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact() override;
virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties() override;
std::unique_ptr<SdrObjList> pSub; // sub list (children)
Point aRefPoint; // Reference point inside the object group
SdrObjList maSdrObjList; // sub list (children)
Point aRefPoint; // Reference point inside the object group
public:
SdrObjGroup();
SdrObjGroup(SdrModel& rSdrModel);
virtual ~SdrObjGroup() override;
virtual void SetBoundRectDirty() override;
@@ -56,13 +49,12 @@
virtual void NbcSetLayer(SdrLayerID nLayer) override;
virtual void SetObjList(SdrObjList* pNewObjList) override;
virtual void SetPage(SdrPage* pNewPage) override;
virtual void SetModel(SdrModel* pNewModel) override;
virtual SdrObjList* GetSubList() const override;
virtual const tools::Rectangle& GetCurrentBoundRect() const override;
virtual const tools::Rectangle& GetSnapRect() const override;
virtual SdrObjGroup* Clone() const override;
virtual SdrObjGroup* Clone(SdrModel* pTargetModel = nullptr) const override;
SdrObjGroup& operator=(const SdrObjGroup& rObj);
virtual OUString TakeObjNameSingul() const override;
diff --git a/include/svx/svdomeas.hxx b/include/svx/svdomeas.hxx
index be2ce84..00a4a95 100644
--- a/include/svx/svdomeas.hxx
+++ b/include/svx/svdomeas.hxx
@@ -85,14 +85,20 @@
virtual void RestGeoData(const SdrObjGeoData& rGeo) override;
public:
SdrMeasureObj();
SdrMeasureObj(const Point& rPt1, const Point& rPt2);
SdrMeasureObj(SdrModel& rSdrModel);
SdrMeasureObj(
SdrModel& rSdrModel,
const Point& rPt1,
const Point& rPt2);
virtual ~SdrMeasureObj() override;
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
virtual sal_uInt16 GetObjIdentifier() const override;
virtual void TakeUnrotatedSnapRect(tools::Rectangle& rRect) const override;
virtual SdrMeasureObj* Clone() const override;
virtual SdrMeasureObj* Clone(SdrModel* pTargetModel = nullptr) const override;
// implemented mainly for the purposes of Clone()
SdrMeasureObj& operator=(const SdrMeasureObj& rObj);
virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override;
diff --git a/include/svx/svdomedia.hxx b/include/svx/svdomedia.hxx
index 43356da..a45410f 100644
--- a/include/svx/svdomedia.hxx
+++ b/include/svx/svdomedia.hxx
@@ -37,10 +37,12 @@
public:
SdrMediaObj();
SdrMediaObj( const tools::Rectangle& rRect );
SdrMediaObj(SdrModel& rSdrModel);
SdrMediaObj(
SdrModel& rSdrModel,
const tools::Rectangle& rRect);
virtual ~SdrMediaObj() override;
virtual ~SdrMediaObj() override;
virtual bool HasTextEdit() const override;
@@ -50,7 +52,7 @@
virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override;
virtual SdrMediaObj* Clone() const override;
virtual SdrMediaObj* Clone(SdrModel* pTargetModel = nullptr) const override;
SdrMediaObj& operator=(const SdrMediaObj& rObj);
virtual void AdjustToMaxRect( const tools::Rectangle& rMaxRect, bool bShrinkOnly = false ) override;
diff --git a/include/svx/svdoole2.hxx b/include/svx/svdoole2.hxx
index edeccfa..b170f6a 100644
--- a/include/svx/svdoole2.hxx
+++ b/include/svx/svdoole2.hxx
@@ -60,6 +60,8 @@
SVX_DLLPRIVATE SdrObject* createSdrGrafObjReplacement(bool bAddText) const;
SVX_DLLPRIVATE void ImpSetVisAreaSize();
SVX_DLLPRIVATE void Init();
protected:
virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact() override;
virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties() override;
@@ -67,8 +69,15 @@
public:
OUString GetStyleString();
SdrOle2Obj( bool bFrame_ = false );
SdrOle2Obj( const svt::EmbeddedObjectRef& rNewObjRef, const OUString& rNewObjName, const tools::Rectangle& rNewRect );
SdrOle2Obj(
SdrModel& rSdrModel,
bool bFrame_ = false);
SdrOle2Obj(
SdrModel& rSdrModel,
const svt::EmbeddedObjectRef& rNewObjRef,
const OUString& rNewObjName,
const tools::Rectangle& rNewRect);
virtual ~SdrOle2Obj() override;
const svt::EmbeddedObjectRef& getEmbeddedObjectRef() const;
@@ -112,7 +121,6 @@
void AbandonObject();
virtual void SetPage(SdrPage* pNewPage) override;
virtual void SetModel(SdrModel* pModel) override;
/** Change the IsClosedObj attribute
@@ -129,7 +137,7 @@
virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override;
virtual SdrOle2Obj* Clone() const override;
virtual SdrOle2Obj* Clone(SdrModel* pTargetModel = nullptr) const override;
SdrOle2Obj& assignFrom(const SdrOle2Obj& rObj);
SdrOle2Obj& operator=(const SdrOle2Obj& rObj);
diff --git a/include/svx/svdopage.hxx b/include/svx/svdopage.hxx
index 8893e81..1f349a9 100644
--- a/include/svx/svdopage.hxx
+++ b/include/svx/svdopage.hxx
@@ -41,8 +41,14 @@
virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties() override;
public:
SdrPageObj(SdrPage* pNewPage = nullptr);
SdrPageObj(const tools::Rectangle& rRect, SdrPage* pNewPage = nullptr);
SdrPageObj(
SdrModel& rSdrModel,
SdrPage* pNewPage = nullptr);
SdrPageObj(
SdrModel& rSdrModel,
const tools::Rectangle& rRect,
SdrPage* pNewPage = nullptr);
virtual ~SdrPageObj() override;
SdrPage* GetReferencedPage() const { return mpShownPage;}
@@ -53,7 +59,7 @@
virtual sal_uInt16 GetObjIdentifier() const override;
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
virtual SdrPageObj* Clone() const override;
virtual SdrPageObj* Clone(SdrModel* pTargetModel = nullptr) const override;
SdrPageObj& operator=(const SdrPageObj& rObj);
virtual OUString TakeObjNameSingul() const override;
diff --git a/include/svx/svdopath.hxx b/include/svx/svdopath.hxx
index e32ccf5..6c21fd0 100644
--- a/include/svx/svdopath.hxx
+++ b/include/svx/svdopath.hxx
@@ -62,14 +62,20 @@
ImpPathForDragAndCreate& impGetDAC() const;
public:
SdrPathObj(SdrObjKind eNewKind);
SdrPathObj(SdrObjKind eNewKind, const basegfx::B2DPolyPolygon& rPathPoly);
SdrPathObj(
SdrModel& rSdrModel,
SdrObjKind eNewKind);
SdrPathObj(
SdrModel& rSdrModel,
SdrObjKind eNewKind,
const basegfx::B2DPolyPolygon& rPathPoly);
virtual ~SdrPathObj() override;
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
virtual sal_uInt16 GetObjIdentifier() const override;
virtual void TakeUnrotatedSnapRect(tools::Rectangle& rRect) const override;
virtual SdrPathObj* Clone() const override;
virtual SdrPathObj* Clone(SdrModel* pTargetModel = nullptr) const override;
SdrPathObj& operator=(const SdrPathObj& rObj);
virtual OUString TakeObjNameSingul() const override;
diff --git a/include/svx/svdorect.hxx b/include/svx/svdorect.hxx
index 729d3f22..f9c1c34 100644
--- a/include/svx/svdorect.hxx
+++ b/include/svx/svdorect.hxx
@@ -66,14 +66,22 @@
*
* Constructor of a rectangular drawing object
*/
SdrRectObj();
SdrRectObj(const tools::Rectangle& rRect);
SdrRectObj(SdrModel& rSdrModel);
SdrRectObj(
SdrModel& rSdrModel,
const tools::Rectangle& rRect);
SdrRectObj& operator=(const SdrRectObj& rCopy);
// Constructor of a text frame
SdrRectObj(SdrObjKind eNewTextKind);
SdrRectObj(SdrObjKind eNewTextKind, const tools::Rectangle& rRect);
SdrRectObj(
SdrModel& rSdrModel,
SdrObjKind eNewTextKind);
SdrRectObj(
SdrModel& rSdrModel,
SdrObjKind eNewTextKind,
const tools::Rectangle& rRect);
virtual ~SdrRectObj() override;
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
@@ -83,7 +91,7 @@
virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override;
virtual SdrRectObj* Clone() const override;
virtual SdrRectObj* Clone(SdrModel* pTargetModel = nullptr) const override;
virtual void RecalcSnapRect() override;
virtual void NbcSetSnapRect(const tools::Rectangle& rRect) override;
virtual void NbcSetLogicRect(const tools::Rectangle& rRect) override;
diff --git a/include/svx/svdotable.hxx b/include/svx/svdotable.hxx
index c33551c..7c5e30e 100644
--- a/include/svx/svdotable.hxx
+++ b/include/svx/svdotable.hxx
@@ -98,13 +98,20 @@
friend class SdrTableObjImpl;
public:
SdrTableObj(SdrModel* _pModel);
SdrTableObj(SdrModel* _pModel, const ::tools::Rectangle& rNewRect, sal_Int32 nColumns, sal_Int32 nRows);
SdrTableObj(SdrModel& rSdrModel);
SdrTableObj(
SdrModel& rSdrModel,
const ::tools::Rectangle& rNewRect,
sal_Int32 nColumns,
sal_Int32 nRows);
virtual ~SdrTableObj() override;
// Table stuff
SdrTableObj* CloneRange( const CellPos& rStartPos, const CellPos& rEndPos );
SdrTableObj* CloneRange(
const CellPos& rStartPos,
const CellPos& rEndPos,
SdrModel& rTargetModel);
void DistributeColumns( sal_Int32 nFirstColumn, sal_Int32 nLastColumn );
void DistributeRows( sal_Int32 nFirstRow, sal_Int32 nLastRow );
@@ -184,7 +191,6 @@
virtual bool IsFontwork() const override;
virtual void SetModel(SdrModel* pNewModel) override;
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
virtual sal_uInt16 GetObjIdentifier() const override;
virtual void SetChanged() override;
@@ -193,7 +199,7 @@
virtual bool AdjustTextFrameWidthAndHeight() override;
virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override;
virtual SdrTableObj* Clone() const override;
virtual SdrTableObj* Clone(SdrModel* pTargetModel = nullptr) const override;
SdrTableObj& operator=(const SdrTableObj& rObj);
virtual void RecalcSnapRect() override;
virtual const tools::Rectangle& GetSnapRect() const override;
diff --git a/include/svx/svdotext.hxx b/include/svx/svdotext.hxx
index 277f51e..13ff894 100644
--- a/include/svx/svdotext.hxx
+++ b/include/svx/svdotext.hxx
@@ -136,16 +136,13 @@
{
private:
// Cell needs access to ImpGetDrawOutliner();
friend class sdr::table::Cell;
friend class sdr::table::SdrTableRtfExporter;
friend class sdr::table::SdrTableRTFParser;
friend class TextChain;
friend class TextChainFlow;
friend class EditingTextChainFlow;
// CustomShapeproperties need to access the "bTextFrame" member:
friend class sdr::properties::CustomShapeProperties;
@@ -272,7 +269,6 @@
SVX_DLLPRIVATE void ImpRegisterLink();
SVX_DLLPRIVATE void ImpDeregisterLink();
SVX_DLLPRIVATE ImpSdrObjTextLinkUserData* GetLinkUserData() const;
// void ImpCheckItemSetChanges(const SfxItemSet& rAttr);
/** Appends the style family to a provided style name */
static void AppendFamilyToStyleName(OUString& styleName, SfxStyleFamily family);
@@ -306,12 +302,19 @@
virtual void AdaptTextMinSize();
// constructors for labeled graphical objects
SdrTextObj();
SdrTextObj(const tools::Rectangle& rNewRect);
SdrTextObj(SdrModel& rSdrModel);
SdrTextObj(
SdrModel& rSdrModel,
const tools::Rectangle& rNewRect);
// constructors for text frames
SdrTextObj(SdrObjKind eNewTextKind);
SdrTextObj(SdrObjKind eNewTextKind, const tools::Rectangle& rNewRect);
SdrTextObj(
SdrModel& rSdrModel,
SdrObjKind eNewTextKind);
SdrTextObj(
SdrModel& rSdrModel,
SdrObjKind eNewTextKind,
const tools::Rectangle& rNewRect);
virtual ~SdrTextObj() override;
@@ -434,7 +437,6 @@
SdrTextAniDirection GetTextAniDirection() const;
virtual void SetPage(SdrPage* pNewPage) override;
virtual void SetModel(SdrModel* pNewModel) override;
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
virtual sal_uInt16 GetObjIdentifier() const override;
@@ -442,7 +444,7 @@
virtual void TakeUnrotatedSnapRect(tools::Rectangle& rRect) const;
virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override;
virtual SdrTextObj* Clone() const override;
virtual SdrTextObj* Clone(SdrModel* pTargetModel = nullptr) const override;
SdrTextObj& operator=(const SdrTextObj& rObj);
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override;
virtual basegfx::B2DPolyPolygon TakeContour() const override;
diff --git a/include/svx/svdouno.hxx b/include/svx/svdouno.hxx
index 48098ae..d9dfb5d 100644
--- a/include/svx/svdouno.hxx
+++ b/include/svx/svdouno.hxx
@@ -61,15 +61,19 @@
public:
explicit SdrUnoObj(const OUString& rModelName);
SdrUnoObj(const OUString& rModelName,
explicit SdrUnoObj(
SdrModel& rSdrModel,
const OUString& rModelName);
SdrUnoObj(
SdrModel& rSdrModel,
const OUString& rModelName,
const css::uno::Reference< css::lang::XMultiServiceFactory >& rxSFac);
virtual ~SdrUnoObj() override;
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
virtual sal_uInt16 GetObjIdentifier() const override;
virtual SdrUnoObj* Clone() const override;
virtual SdrUnoObj* Clone(SdrModel* pTargetModel = nullptr) const override;
SdrUnoObj& operator= (const SdrUnoObj& rObj);
virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact) override;
virtual void NbcSetLayer(SdrLayerID nLayer) override;
@@ -77,10 +81,6 @@
// SpecialDrag support
virtual bool hasSpecialDrag() const override;
// FullDrag support
virtual bool supportsFullDrag() const override;
virtual SdrObject* getFullDragClone() const override;
virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override;
diff --git a/include/svx/svdovirt.hxx b/include/svx/svdovirt.hxx
index c6d626e..9e4e6d9 100644
--- a/include/svx/svdovirt.hxx
+++ b/include/svx/svdovirt.hxx
@@ -37,7 +37,7 @@
virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact() override;
SdrObject& rRefObj; // Referenced drawing object
tools::Rectangle aSnapRect;
tools::Rectangle aSnapRect;
protected:
virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) override;
@@ -47,12 +47,14 @@
virtual void RestGeoData(const SdrObjGeoData& rGeo) override;
public:
SdrVirtObj(SdrObject& rNewObj);
SdrVirtObj(
SdrModel& rSdrModel,
SdrObject& rNewObj);
virtual ~SdrVirtObj() override;
SdrObject& ReferencedObj();
const SdrObject& GetReferencedObj() const;
virtual void NbcSetAnchorPos(const Point& rAnchorPos) override;
virtual void SetModel(SdrModel* pNewModel) override;
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
virtual SdrInventor GetObjInventor() const override;
@@ -62,7 +64,7 @@
virtual const tools::Rectangle& GetCurrentBoundRect() const override;
virtual const tools::Rectangle& GetLastBoundRect() const override;
virtual void RecalcBoundRect() override;
virtual SdrVirtObj* Clone() const override;
virtual SdrVirtObj* Clone(SdrModel* pTargetModel = nullptr) const override;
SdrVirtObj& operator=(const SdrVirtObj& rObj);
virtual OUString TakeObjNameSingul() const override;
diff --git a/include/svx/svdpage.hxx b/include/svx/svdpage.hxx
index 1a7fdb5..1ea8f1f 100644
--- a/include/svx/svdpage.hxx
+++ b/include/svx/svdpage.hxx
@@ -53,21 +53,26 @@
class SfxStyleSheet;
class SvxUnoDrawPagesAccess;
// class SdrObjList
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// SdrObjList
// E3dObjList
// SdrPage -> see continuation there
// class SdrObjList
class SVX_DLLPUBLIC SdrObjList
{
private:
SdrObjList(const SdrObjList& rSrcList) = delete;
SdrObjList &operator=(const SdrObjList& rSrcList) = delete;
private:
::std::vector<SdrObject*> maList;
::std::vector<SdrObject*> maList;
protected:
friend class SdrObjListIter;
friend class SdrEditView;
SdrObjList* pUpList; /// parent list
SdrModel* pModel; /// model to which the list belongs (Layer,ItemPool,Storage)
SdrPage* pPage; /// Page containing the list, may be "this".
SdrObject* pOwnerObj; /// OwnerObject, if it's list of a Group object.
tools::Rectangle aOutRect;
@@ -75,20 +80,20 @@
SdrObjListKind eListKind;
bool bObjOrdNumsDirty;
bool bRectsDirty;
protected:
void RecalcRects();
SdrObjList();
void lateInit(const SdrObjList& rSrcList);
void lateInitSdrObjList(const SdrObjList& rSrcList, SdrModel* pNewModel = nullptr);
private:
/// simple ActionChildInserted forwarder to have it on a central place
static void impChildInserted(SdrObject const & rChild);
public:
SdrObjList(SdrModel* pNewModel, SdrPage* pNewPage);
SdrObjList(SdrPage* pNewPage = nullptr);
virtual ~SdrObjList();
virtual SdrObjList* CloneSdrObjList(SdrModel* pNewModel = nullptr) const;
void CopyObjects(const SdrObjList& rSrcList);
void CopyObjects(const SdrObjList& rSrcList, SdrModel* pNewModel = nullptr);
/// clean up everything (without Undo)
void Clear();
SdrObjListKind GetListKind() const { return eListKind; }
@@ -99,8 +104,7 @@
void SetOwnerObj(SdrObject* pNewOwner) { pOwnerObj=pNewOwner; }
SdrPage* GetPage() const;
void SetPage(SdrPage* pNewPage);
SdrModel* GetModel() const;
virtual void SetModel(SdrModel* pNewModel);
/// recalculate order numbers / ZIndex
void RecalcObjOrdNums();
bool IsObjOrdNumsDirty() const { return bObjOrdNumsDirty; }
@@ -348,6 +352,17 @@
Also it's possible to request and directly set the order number (ZOrder)
of SdrObjects.
*/
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// SdrPage
// DlgEdPage
// FmFormPage
// ScDrawPage
// SdPage
// SwDPage
// OReportPage
class SVX_DLLPUBLIC SdrPage : public SdrObjList, public virtual tools::WeakBase
{
// #i9076#
@@ -358,7 +373,8 @@
// and thus has to set mxUnoPage (it also relies on mxUnoPage not being WeakRef)
friend class reportdesign::OSection;
SdrPage& operator=(const SdrPage& rSrcPage) = delete;
SdrPage& operator=(const SdrPage&) = delete;
SdrPage(const SdrPage&) = delete;
// start PageUser section
private:
@@ -371,6 +387,9 @@
void AddPageUser(sdr::PageUser& rNewUser);
void RemovePageUser(sdr::PageUser& rOldUser);
// SdrModel access on SdrPage level
SdrModel& getSdrModelFromSdrPage() const { return mrSdrModelFromSdrPage; }
protected:
sdr::contact::ViewContact* CreateObjectSpecificViewContact();
public:
@@ -381,6 +400,10 @@
void ActionChanged();
private:
// the SdrModel this page was created with, unchanged during SdrPage lifetime
SdrModel& mrSdrModelFromSdrPage;
private:
sal_Int32 mnWidth; // Seitengroesse
sal_Int32 mnHeight; // Seitengroesse
sal_Int32 mnBorderLeft; // Seitenrand links
@@ -420,14 +443,13 @@
// to call lateInit() after copy-construction of a new object. Any initialization in derived
// classes that needs access to the page objects must be deferred to lateInit. And it must
// call lateInit() of its parent class.
SdrPage(const SdrPage& rSrcPage);
void lateInit(const SdrPage& rSrcPage, SdrModel* pNewModel = nullptr);
void lateInit(const SdrPage& rSrcPage);
public:
explicit SdrPage(SdrModel& rNewModel, bool bMasterPage=false);
explicit SdrPage(SdrModel& rModel, bool bMasterPage=false);
virtual ~SdrPage() override;
virtual SdrPage* Clone() const;
virtual SdrPage* Clone(SdrModel* pNewModel) const;
virtual SdrPage* Clone(SdrModel* pNewModel = nullptr) const;
bool IsMasterPage() const { return mbMaster; }
void SetInserted(bool bNew = true);
bool IsInserted() const { return mbInserted; }
@@ -458,8 +480,6 @@
sal_Int32 GetRightBorder() const;
sal_Int32 GetLowerBorder() const;
virtual void SetModel(SdrModel* pNewModel) override;
// New MasterPage interface
bool TRG_HasMasterPage() const { return (nullptr != mpMasterPageDescriptor); }
void TRG_SetMasterPage(SdrPage& rNew);
@@ -505,9 +525,6 @@
const sdr::contact::ViewObjectContact& rOriginal,
const sdr::contact::DisplayInfo& rDisplayInfo,
bool bEdit );
private:
void impl_setModelForLayerAdmin(SdrModel* pNewModel);
};
diff --git a/include/svx/svdpntv.hxx b/include/svx/svdpntv.hxx
index eb48416a..2405ad9 100644
--- a/include/svx/svdpntv.hxx
+++ b/include/svx/svdpntv.hxx
@@ -100,12 +100,39 @@
const basegfx::B2DRange& rTargetRange,
const sal_uInt32 nMaximumQuadraticPixels);
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// SdrPaintView
// SdrSnapView
// SdrMarkView
// SdrEditView
// SdrPolyEditView
// SdrGlueEditView
// SdrObjEditView
// SdrExchangeView
// SdrDragView
// SdrCreateView
// SdrView
// DlgEdView
// GraphCtrlView
// E3dView
// DrawViewWrapper
// FmFormView
// ScDrawView
// sd::View (may have more?)
// sd::DrawView
// SwDrawView
// OSectionView
class SVX_DLLPUBLIC SdrPaintView : public SfxListener, public SfxRepeatTarget, public SfxBroadcaster, public ::utl::ConfigurationListener
{
private:
friend class SdrPageView;
friend class SdrGrafObj;
// the SdrModel this view was created with, unchanged during lifetime
SdrModel& mrSdrModelFromSdrView;
SdrPageView* mpPageView;
protected:
SdrModel* mpModel;
@@ -238,10 +265,13 @@
virtual void ModelHasChanged();
// #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView
SdrPaintView(SdrModel* pModel1, OutputDevice* pOut);
// A SdrView always needs a SdrModel for lifetime (Pool, ...)
SdrPaintView(SdrModel& rSdrModel, OutputDevice* pOut);
virtual ~SdrPaintView() override;
public:
// SdrModel access on SdrView level
SdrModel& getSdrModelFromSdrView() const { return mrSdrModelFromSdrView; }
virtual void ClearPageView();
SdrModel* GetModel() const { return mpModel; }
diff --git a/include/svx/svdpoev.hxx b/include/svx/svdpoev.hxx
index c7a33ba..187eadd 100644
--- a/include/svx/svdpoev.hxx
+++ b/include/svx/svdpoev.hxx
@@ -25,7 +25,7 @@
#include <svx/ipolypolygoneditorcontroller.hxx>
class SVX_DLLPUBLIC SdrPolyEditView: public SdrEditView, public IPolyPolygonEditorController
class SVX_DLLPUBLIC SdrPolyEditView : public SdrEditView, public IPolyPolygonEditorController
{
friend class SdrEditView;
@@ -45,7 +45,10 @@
protected:
// #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView
SdrPolyEditView(SdrModel* pModel1, OutputDevice* pOut);
SdrPolyEditView(
SdrModel& rSdrModel,
OutputDevice* pOut);
virtual ~SdrPolyEditView() override;
public:
diff --git a/include/svx/svdsnpv.hxx b/include/svx/svdsnpv.hxx
index a90bdf3..0a40c9ac 100644
--- a/include/svx/svdsnpv.hxx
+++ b/include/svx/svdsnpv.hxx
@@ -90,7 +90,7 @@
// #114409#-1 Migrate PageOrigin
class ImplPageOriginOverlay;
class SVX_DLLPUBLIC SdrSnapView: public SdrPaintView
class SVX_DLLPUBLIC SdrSnapView : public SdrPaintView
{
protected:
// #114409#-1 Migrate PageOrigin
@@ -127,7 +127,10 @@
protected:
// #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView
SdrSnapView(SdrModel* pModel1, OutputDevice* pOut);
SdrSnapView(
SdrModel& rSdrModel,
OutputDevice* pOut);
virtual ~SdrSnapView() override;
public:
diff --git a/include/svx/svdtext.hxx b/include/svx/svdtext.hxx
index 020d8a4..11b91f0 100644
--- a/include/svx/svdtext.hxx
+++ b/include/svx/svdtext.hxx
@@ -47,7 +47,6 @@
explicit SdrText( SdrTextObj& rObject );
virtual ~SdrText() override;
virtual void SetModel(SdrModel* pNewModel);
void ForceOutlinerParaObject( OutlinerMode nOutlMode );
virtual void SetOutlinerParaObject( OutlinerParaObject* pTextObject );
@@ -60,7 +59,8 @@
// return a text-specific ItemSet
virtual const SfxItemSet& GetItemSet() const;
SdrModel* GetModel() const { return mpModel; }
// This class does not need an own SdrModel reference - always
// has the SdrTextObj working with so can use SdrModel::getSdrModelFromSdrObject()
SdrTextObj& GetObject() const { return mrObject; }
/** returns the current OutlinerParaObject and removes it from this instance */
@@ -76,7 +76,6 @@
private:
std::unique_ptr<OutlinerParaObject> mpOutlinerParaObject;
SdrTextObj& mrObject;
SdrModel* mpModel;
bool mbPortionInfoChecked;
};
diff --git a/include/svx/svdview.hxx b/include/svx/svdview.hxx
index e9d0f51..2bab7ea 100644
--- a/include/svx/svdview.hxx
+++ b/include/svx/svdview.hxx
@@ -144,7 +144,7 @@
};
class SVX_DLLPUBLIC SdrView: public SdrCreateView, public virtual tools::WeakBase
class SVX_DLLPUBLIC SdrView : public SdrCreateView, public virtual tools::WeakBase
{
friend class SdrPageView;
@@ -156,7 +156,10 @@
SvtAccessibilityOptions maAccessibilityOptions;
public:
explicit SdrView(SdrModel* pModel1, OutputDevice* pOut = nullptr);
explicit SdrView(
SdrModel& rSdrModel,
OutputDevice* pOut = nullptr);
virtual ~SdrView() override;
// The default value for all dispatchers is activated. If the app for example
diff --git a/include/svx/svdxcgv.hxx b/include/svx/svdxcgv.hxx
index 8c4deca..52dc63b 100644
--- a/include/svx/svdxcgv.hxx
+++ b/include/svx/svdxcgv.hxx
@@ -25,7 +25,7 @@
#include <vcl/gdimtf.hxx>
#include <svx/svxdllapi.h>
class SVX_DLLPUBLIC SdrExchangeView: public SdrObjEditView
class SVX_DLLPUBLIC SdrExchangeView : public SdrObjEditView
{
friend class SdrPageView;
@@ -40,7 +40,9 @@
protected:
// #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView
SdrExchangeView(SdrModel* pModel1, OutputDevice* pOut);
SdrExchangeView(
SdrModel& rSdrModel,
OutputDevice* pOut);
public:
// Output all marked objects on the specified OutputDevice
@@ -72,20 +74,16 @@
Graphic GetAllMarkedGraphic() const;
/** Generate a Graphic for the given draw object in the given model
/** Generate a Graphic for the given draw object
@param pModel
Must not be NULL. Denotes the draw model the object is a part
of.
@param pObj
@param rSdrObject
The object (can also be a group object) to retrieve a Graphic
for. Must not be NULL.
for.
@return a graphical representation of the given object, as it
appears on screen (e.g. with rotation, if any, applied).
*/
static Graphic GetObjGraphic( const SdrModel* pModel, const SdrObject* pObj );
static Graphic GetObjGraphic(const SdrObject& rSdrObject);
// The new Draw objects are marked for all paste methods.
// If bAddMark is true, the new Draw objects are added to an existing
diff --git a/include/svx/svxdlg.hxx b/include/svx/svxdlg.hxx
index 77f4437..ae84bb3 100644
--- a/include/svx/svxdlg.hxx
+++ b/include/svx/svxdlg.hxx
@@ -464,7 +464,7 @@
const sal_uInt16 _nInitiallySelectedEvent
) = 0;
virtual VclPtr<SfxAbstractTabDialog> CreateSvxFormatCellsDialog( const SfxItemSet* pAttr, SdrModel* pModel, const SdrObject* pObj )=0;
virtual VclPtr<SfxAbstractTabDialog> CreateSvxFormatCellsDialog( const SfxItemSet* pAttr, const SdrModel& rModel, const SdrObject* pObj )=0;
virtual VclPtr<SvxAbstractSplitTableDialog> CreateSvxSplitTableDialog(weld::Window* pParent, bool bIsTableVertical, long nMaxVertical) = 0;
diff --git a/include/svx/unomod.hxx b/include/svx/unomod.hxx
index 630c51c..04571c9 100644
--- a/include/svx/unomod.hxx
+++ b/include/svx/unomod.hxx
@@ -32,6 +32,10 @@
class SVX_DLLPUBLIC SvxUnoDrawMSFactory : public css::lang::XMultiServiceFactory
{
protected:
/** abstract SdrModel provider */
virtual SdrModel* getSdrModelFromUnoModel() const = 0; //TTTT make reference return
public:
SvxUnoDrawMSFactory() throw() {};
diff --git a/include/svx/unomodel.hxx b/include/svx/unomodel.hxx
index ab9ab9e..e637e44 100644
--- a/include/svx/unomodel.hxx
+++ b/include/svx/unomodel.hxx
@@ -31,11 +31,12 @@
class SdrModel;
class SVX_DLLPUBLIC SvxUnoDrawingModel : public SfxBaseModel, // implements SfxListener, OWEAKOBJECT & other
public SvxFmMSFactory,
public css::drawing::XDrawPagesSupplier,
public css::lang::XServiceInfo,
public css::ucb::XAnyCompareFactory
class SVX_DLLPUBLIC SvxUnoDrawingModel
: public SfxBaseModel, // implements SfxListener, OWEAKOBJECT & other
public SvxFmMSFactory,
public css::drawing::XDrawPagesSupplier,
public css::lang::XServiceInfo,
public css::ucb::XAnyCompareFactory
{
friend class SvxUnoDrawPagesAccess;
@@ -53,6 +54,10 @@
css::uno::Sequence< css::uno::Type > maTypeSequence;
protected:
// SvxUnoDrawMSFactory
virtual SdrModel* getSdrModelFromUnoModel() const override;
public:
SvxUnoDrawingModel( SdrModel* pDoc ) throw();
virtual ~SvxUnoDrawingModel() throw() override;
diff --git a/include/svx/unopage.hxx b/include/svx/unopage.hxx
index 6f84e72..eefc11c6 100644
--- a/include/svx/unopage.hxx
+++ b/include/svx/unopage.hxx
@@ -68,8 +68,8 @@
protected:
cppu::OBroadcastHelper mrBHelper;
SdrPage* mpPage;
SdrModel* mpModel;
SdrPage* mpPage; // TTTT should be reference
SdrModel* mpModel; // TTTT probably not needed -> use from SdrPage
SdrView* mpView;
void SelectObjectsInView( const css::uno::Reference< css::drawing::XShapes >& aShapes, SdrPageView* pPageView ) throw ();
@@ -83,7 +83,6 @@
// Internals
SdrPage* GetSdrPage() const { return mpPage; }
void ChangeModel( SdrModel* pNewModel );
// Creation of a SdrObject and insertion into the SdrPage
SdrObject *CreateSdrObject( const css::uno::Reference< css::drawing::XShape >& xShape, bool bBeginning = false ) throw();
diff --git a/include/svx/unoshape.hxx b/include/svx/unoshape.hxx
index 4bb90d8..422f6b1 100644
--- a/include/svx/unoshape.hxx
+++ b/include/svx/unoshape.hxx
@@ -137,8 +137,10 @@
const SvxItemPropertySet* mpPropSet;
const SfxItemPropertyMapEntry* maPropMapEntries;
::tools::WeakReference< SdrObject > mpObj;
SdrModel* mpModel;
private:
::tools::WeakReference< SdrObject > mpSdrObjectWeakReference;
protected:
// translations for writer, which works in TWIPS
void ForceMetricToItemPoolMetric(Pair& rPoint) const throw();
void ForceMetricToItemPoolMetric(Point& rPoint) const throw() { ForceMetricToItemPoolMetric(rPoint.toPair()); }
@@ -206,10 +208,13 @@
void TakeSdrObjectOwnership();
bool HasSdrObjectOwnership() const;
void ChangeModel( SdrModel* pNewModel );
// used exclusively by SdrObject
void InvalidateSdrObject();
void InvalidateSdrObject() { mpObj.reset( nullptr ); };
SdrObject* GetSdrObject() const {return mpObj.get();}
// Encapsulated access to SdrObject
SdrObject* GetSdrObject() const { return mpSdrObjectWeakReference.get(); }
bool HasSdrObject() const { return mpSdrObjectWeakReference.is(); }
void SetShapeType( const OUString& ShapeType ) { maShapeType = ShapeType; }
/// @throws css::uno::RuntimeException
css::uno::Any GetBitmap( bool bMetaFile = false ) const;
diff --git a/include/svx/unoshtxt.hxx b/include/svx/unoshtxt.hxx
index f38cf8a..f16358d 100644
--- a/include/svx/unoshtxt.hxx
+++ b/include/svx/unoshtxt.hxx
@@ -77,8 +77,6 @@
virtual Point LogicToPixel( const Point&, const MapMode& ) const override;
virtual Point PixelToLogic( const Point&, const MapMode& ) const override;
void ChangeModel( SdrModel* pNewModel );
void UpdateOutliner();
private:
diff --git a/include/svx/view3d.hxx b/include/svx/view3d.hxx
index 48ff9b6f..be4381c 100644
--- a/include/svx/view3d.hxx
+++ b/include/svx/view3d.hxx
@@ -63,7 +63,10 @@
void BreakSingle3DObj(E3dObject* pObj);
public:
E3dView(SdrModel* pModel, OutputDevice* pOut);
E3dView(
SdrModel& rSdrModel,
OutputDevice* pOut);
virtual ~E3dView() override;
// Output all marked Objects on the given OutputDevice.
diff --git a/reportdesign/inc/ReportDefinition.hxx b/reportdesign/inc/ReportDefinition.hxx
index 6c0883c..79c58c9 100644
--- a/reportdesign/inc/ReportDefinition.hxx
+++ b/reportdesign/inc/ReportDefinition.hxx
@@ -186,7 +186,14 @@
css::uno::Reference< css::uno::XComponentContext > getContext();
protected:
/** abstract SdrModel provider */
virtual SdrModel* getSdrModelFromUnoModel() const override;
public:
//TTTT Needed? Or same as above?
static std::shared_ptr<rptui::OReportModel> getSdrModel(const css::uno::Reference< css::report::XReportDefinition >& _xReportDefinition);
private:
DECLARE_XINTERFACE( )
DECLARE_XTYPEPROVIDER( )
diff --git a/reportdesign/inc/RptObject.hxx b/reportdesign/inc/RptObject.hxx
index 2017828..17f4336 100644
--- a/reportdesign/inc/RptObject.hxx
+++ b/reportdesign/inc/RptObject.hxx
@@ -112,7 +112,9 @@
*/
void releaseUnoShape() { m_xKeepShapeAlive.clear(); }
static SdrObject* createObject(const css::uno::Reference< css::report::XReportComponent>& _xComponent);
static SdrObject* createObject(
SdrModel& rTargetModel,
const css::uno::Reference< css::report::XReportComponent>& _xComponent);
static sal_uInt16 getObjectType(const css::uno::Reference< css::report::XReportComponent>& _xComponent);
};
@@ -123,9 +125,11 @@
friend class OReportPage;
friend class DlgEdFactory;
public:
static OCustomShape* Create( const css::uno::Reference< css::report::XReportComponent>& _xComponent )
static OCustomShape* Create(
SdrModel& rSdrModel,
const css::uno::Reference< css::report::XReportComponent>& _xComponent)
{
return new OCustomShape( _xComponent );
return new OCustomShape(rSdrModel, _xComponent );
}
virtual ~OCustomShape() override;
@@ -139,8 +143,12 @@
private:
virtual void impl_setUnoShape( const css::uno::Reference< css::uno::XInterface >& rxUnoShape ) override;
OCustomShape(const css::uno::Reference< css::report::XReportComponent>& _xComponent);
OCustomShape(const OUString& _sComponentName);
OCustomShape(
SdrModel& rSdrModel,
const css::uno::Reference< css::report::XReportComponent>& _xComponent);
OCustomShape(
SdrModel& rSdrModel,
const OUString& _sComponentName);
virtual void NbcMove( const Size& rSize ) override;
virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact) override;
@@ -158,9 +166,12 @@
friend class OReportPage;
friend class DlgEdFactory;
public:
static OOle2Obj* Create( const css::uno::Reference< css::report::XReportComponent>& _xComponent,sal_uInt16 _nType )
static OOle2Obj* Create(
SdrModel& rSdrModel,
const css::uno::Reference< css::report::XReportComponent>& _xComponent,
sal_uInt16 _nType)
{
return new OOle2Obj( _xComponent,_nType );
return new OOle2Obj(rSdrModel, _xComponent, _nType);
}
virtual ~OOle2Obj() override;
@@ -171,7 +182,7 @@
virtual sal_uInt16 GetObjIdentifier() const override;
virtual SdrInventor GetObjInventor() const override;
// Clone() should make a complete copy of the object.
virtual OOle2Obj* Clone() const override;
virtual OOle2Obj* Clone(SdrModel* pTargetModel = nullptr) const override;
virtual void initializeOle() override;
OOle2Obj& operator=(const OOle2Obj& rObj);
@@ -179,9 +190,14 @@
void initializeChart( const css::uno::Reference< css::frame::XModel>& _xModel);
private:
OOle2Obj(const css::uno::Reference< css::report::XReportComponent>& _xComponent,sal_uInt16 _nType);
OOle2Obj(const OUString& _sComponentName,sal_uInt16 _nType);
OOle2Obj(
SdrModel& rSdrModel,
const css::uno::Reference< css::report::XReportComponent>& _xComponent,
sal_uInt16 _nType);
OOle2Obj(
SdrModel& rSdrModel,
const OUString& _sComponentName,
sal_uInt16 _nType);
virtual void NbcMove( const Size& rSize ) override;
virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact) override;
@@ -208,12 +224,15 @@
sal_uInt16 m_nObjectType;
protected:
OUnoObject(const OUString& _sComponentName
,const OUString& rModelName
,sal_uInt16 _nObjectType);
OUnoObject( const css::uno::Reference< css::report::XReportComponent>& _xComponent
,const OUString& rModelName
,sal_uInt16 _nObjectType);
OUnoObject(SdrModel& rSdrModel,
const OUString& _sComponentName,
const OUString& rModelName,
sal_uInt16 _nObjectType);
OUnoObject(
SdrModel& rSdrModel,
const css::uno::Reference< css::report::XReportComponent>& _xComponent,
const OUString& rModelName,
sal_uInt16 _nObjectType);
virtual ~OUnoObject() override;
@@ -240,7 +259,7 @@
virtual css::uno::Reference< css::uno::XInterface > getUnoShape() override;
virtual sal_uInt16 GetObjIdentifier() const override;
virtual SdrInventor GetObjInventor() const override;
virtual OUnoObject* Clone() const override;
virtual OUnoObject* Clone(SdrModel* pTargetModel = nullptr) const override;
OUnoObject& operator=(const OUnoObject& rObj);
diff --git a/reportdesign/inc/RptPage.hxx b/reportdesign/inc/RptPage.hxx
index c168cd5..2c45c93 100644
--- a/reportdesign/inc/RptPage.hxx
+++ b/reportdesign/inc/RptPage.hxx
@@ -35,20 +35,21 @@
class REPORTDESIGN_DLLPUBLIC OReportPage : public SdrPage
{
OReportPage& operator=(const OReportPage&) = delete;
OReportPage(const OReportPage&) = delete;
OReportModel& rModel;
css::uno::Reference< css::report::XSection > m_xSection;
bool m_bSpecialInsertMode;
std::vector<SdrObject*> m_aTemporaryObjectList;
OReportPage(const OReportPage&);
// method to remove temporary objects, created by 'special mode'
// (BegDragObj)
void removeTempObject(SdrObject const *_pToRemoveObj);
virtual ~OReportPage() override;
OReportModel& getOReportModelFromOReportPage() const { return rModel; }
protected:
virtual css::uno::Reference< css::uno::XInterface > createUnoPage() override;
public:
@@ -56,9 +57,7 @@
OReportPage( OReportModel& rModel
,const css::uno::Reference< css::report::XSection >& _xSection );
virtual SdrPage* Clone() const override;
virtual SdrPage* Clone( SdrModel* pNewModel ) const override;
virtual SdrPage* Clone(SdrModel* pNewModel = nullptr) const override;
virtual void NbcInsertObject(SdrObject* pObj, size_t nPos=SAL_MAX_SIZE) override;
virtual SdrObject* RemoveObject(size_t nObjNum) override;
diff --git a/reportdesign/source/core/api/ReportDefinition.cxx b/reportdesign/source/core/api/ReportDefinition.cxx
index 641b88d..11064f2 100644
--- a/reportdesign/source/core/api/ReportDefinition.cxx
+++ b/reportdesign/source/core/api/ReportDefinition.cxx
@@ -532,10 +532,12 @@
};
OReportDefinition::OReportDefinition(uno::Reference< uno::XComponentContext > const & _xContext)
: ReportDefinitionBase(m_aMutex)
,ReportDefinitionPropertySet(_xContext,IMPLEMENTS_PROPERTY_SET,uno::Sequence< OUString >())
,m_aProps(new OReportComponentProperties(_xContext))
,m_pImpl(new OReportDefinitionImpl(m_aMutex))
: ::cppu::BaseMutex(),
ReportDefinitionBase(m_aMutex),
ReportDefinitionPropertySet(_xContext,IMPLEMENTS_PROPERTY_SET,uno::Sequence< OUString >()),
::comphelper::IEmbeddedHelper(),
m_aProps(new OReportComponentProperties(_xContext)),
m_pImpl(new OReportDefinitionImpl(m_aMutex))
{
m_aProps->m_sName = RptResId(RID_STR_REPORT);
osl_atomic_increment(&m_refCount);
@@ -548,13 +550,16 @@
osl_atomic_decrement( &m_refCount );
}
OReportDefinition::OReportDefinition(uno::Reference< uno::XComponentContext > const & _xContext
,const uno::Reference< lang::XMultiServiceFactory>& _xFactory
,uno::Reference< drawing::XShape >& _xShape)
: ReportDefinitionBase(m_aMutex)
,ReportDefinitionPropertySet(_xContext,IMPLEMENTS_PROPERTY_SET,uno::Sequence< OUString >())
,m_aProps(new OReportComponentProperties(_xContext))
,m_pImpl(new OReportDefinitionImpl(m_aMutex))
OReportDefinition::OReportDefinition(
uno::Reference< uno::XComponentContext > const & _xContext,
const uno::Reference< lang::XMultiServiceFactory>& _xFactory,
uno::Reference< drawing::XShape >& _xShape)
: ::cppu::BaseMutex(),
ReportDefinitionBase(m_aMutex),
ReportDefinitionPropertySet(_xContext,IMPLEMENTS_PROPERTY_SET,uno::Sequence< OUString >()),
::comphelper::IEmbeddedHelper(),
m_aProps(new OReportComponentProperties(_xContext)),
m_pImpl(new OReportDefinitionImpl(m_aMutex))
{
m_aProps->m_sName = RptResId(RID_STR_REPORT);
m_aProps->m_xFactory = _xFactory;
@@ -2015,6 +2020,11 @@
return pReportModel;
}
SdrModel* OReportDefinition::getSdrModelFromUnoModel() const
{
return m_pImpl->m_pReportModel.get();
}
uno::Reference< uno::XInterface > SAL_CALL OReportDefinition::createInstanceWithArguments( const OUString& aServiceSpecifier, const uno::Sequence< uno::Any >& _aArgs)
{
::osl::MutexGuard aGuard(m_aMutex);
diff --git a/reportdesign/source/core/sdr/ReportDrawPage.cxx b/reportdesign/source/core/sdr/ReportDrawPage.cxx
index e67f7a9..cf73d9c 100644
--- a/reportdesign/source/core/sdr/ReportDrawPage.cxx
+++ b/reportdesign/source/core/sdr/ReportDrawPage.cxx
@@ -29,9 +29,9 @@
#include <svx/svdmodel.hxx>
#include <com/sun/star/beans/NamedValue.hpp>
#include <com/sun/star/embed/Aspects.hpp>
#include <tools/diagnose_ex.h>
#include <svx/unoshape.hxx>
#include <svx/svdpage.hxx>
namespace reportdesign
{
@@ -49,7 +49,12 @@
{
uno::Reference< report::XReportComponent> xReportComponent(xDescr,uno::UNO_QUERY);
if ( xReportComponent.is() )
return OObjectBase::createObject(xReportComponent);
{
return OObjectBase::createObject(
GetSdrPage()->getSdrModelFromSdrPage(),
xReportComponent);
}
return SvxDrawPage::CreateSdrObject_( xDescr );
}
@@ -101,7 +106,7 @@
sal_Int64 nAspect = embed::Aspects::MSOLE_CONTENT;
uno::Reference < embed::XEmbeddedObject > xObj;
OUString sName;
xObj = pObj->GetModel()->GetPersist()->getEmbeddedObjectContainer().CreateEmbeddedObject(
xObj = pObj->getSdrModelFromSdrObject().GetPersist()->getEmbeddedObjectContainer().CreateEmbeddedObject(
::comphelper::MimeConfigurationHelper::GetSequenceClassIDRepresentation(
"80243D39-6741-46C5-926E-069164FF87BB"), sName );
OSL_ENSURE(xObj.is(),"Embedded Object could not be created!");
@@ -131,8 +136,8 @@
try
{
OReportModel* pRptModel = static_cast<OReportModel*>(pObj->GetModel());
xRet.set( pRptModel->createShape(sServiceName,xShape,bChangeOrientation ? 0 : 1), uno::UNO_QUERY_THROW );
OReportModel& rRptModel(static_cast< OReportModel& >(pObj->getSdrModelFromSdrObject()));
xRet.set( rRptModel.createShape(sServiceName,xShape,bChangeOrientation ? 0 : 1), uno::UNO_QUERY_THROW );
}
catch( const uno::Exception& )
{
diff --git a/reportdesign/source/core/sdr/ReportUndoFactory.cxx b/reportdesign/source/core/sdr/ReportUndoFactory.cxx
index e40411c3..ee64aed 100644
--- a/reportdesign/source/core/sdr/ReportUndoFactory.cxx
+++ b/reportdesign/source/core/sdr/ReportUndoFactory.cxx
@@ -35,9 +35,9 @@
uno::Reference< report::XGroup> xGroup = xSection->getGroup();
SdrUndoAction* pUndo = nullptr;
if ( xGroup.is() )
pUndo = new OUndoGroupSectionAction(*rObject.GetModel(),_eAction,OGroupHelper::getMemberFunction(xSection),xGroup,xReportComponent,pCommentId);
pUndo = new OUndoGroupSectionAction(rObject.getSdrModelFromSdrObject(),_eAction,OGroupHelper::getMemberFunction(xSection),xGroup,xReportComponent,pCommentId);
else
pUndo = new OUndoReportSectionAction(*rObject.GetModel(),_eAction,OReportHelper::getMemberFunction(xSection),xSection->getReportDefinition(),xReportComponent,pCommentId);
pUndo = new OUndoReportSectionAction(rObject.getSdrModelFromSdrObject(),_eAction,OReportHelper::getMemberFunction(xSection),xSection->getReportDefinition(),xReportComponent,pCommentId);
return pUndo;
}
diff --git a/reportdesign/source/core/sdr/RptObject.cxx b/reportdesign/source/core/sdr/RptObject.cxx
index a0af522..737c87e 100644
--- a/reportdesign/source/core/sdr/RptObject.cxx
+++ b/reportdesign/source/core/sdr/RptObject.cxx
@@ -107,7 +107,9 @@
return 0;
}
SdrObject* OObjectBase::createObject(const uno::Reference< report::XReportComponent>& _xComponent)
SdrObject* OObjectBase::createObject(
SdrModel& rTargetModel,
const uno::Reference< report::XReportComponent>& _xComponent)
{
SdrObject* pNewObj = nullptr;
sal_uInt16 nType = OObjectBase::getObjectType(_xComponent);
@@ -115,9 +117,11 @@
{
case OBJ_DLG_FIXEDTEXT:
{
OUnoObject* pUnoObj = new OUnoObject( _xComponent
,OUString("com.sun.star.form.component.FixedText")
,OBJ_DLG_FIXEDTEXT);
OUnoObject* pUnoObj = new OUnoObject(
rTargetModel,
_xComponent,
OUString("com.sun.star.form.component.FixedText"),
OBJ_DLG_FIXEDTEXT);
pNewObj = pUnoObj;
uno::Reference<beans::XPropertySet> xControlModel(pUnoObj->GetUnoControlModel(),uno::UNO_QUERY);
@@ -126,23 +130,31 @@
}
break;
case OBJ_DLG_IMAGECONTROL:
pNewObj = new OUnoObject(_xComponent
,OUString("com.sun.star.form.component.DatabaseImageControl")
,OBJ_DLG_IMAGECONTROL);
pNewObj = new OUnoObject(
rTargetModel,
_xComponent,
OUString("com.sun.star.form.component.DatabaseImageControl"),
OBJ_DLG_IMAGECONTROL);
break;
case OBJ_DLG_FORMATTEDFIELD:
pNewObj = new OUnoObject( _xComponent
,OUString("com.sun.star.form.component.FormattedField")
,OBJ_DLG_FORMATTEDFIELD);
pNewObj = new OUnoObject(
rTargetModel,
_xComponent,
OUString("com.sun.star.form.component.FormattedField"),
OBJ_DLG_FORMATTEDFIELD);
break;
case OBJ_DLG_HFIXEDLINE:
case OBJ_DLG_VFIXEDLINE:
pNewObj = new OUnoObject( _xComponent
,OUString("com.sun.star.awt.UnoControlFixedLineModel")
,nType);
pNewObj = new OUnoObject(
rTargetModel,
_xComponent,
OUString("com.sun.star.awt.UnoControlFixedLineModel"),
nType);
break;
case OBJ_CUSTOMSHAPE:
pNewObj = OCustomShape::Create( _xComponent );
pNewObj = OCustomShape::Create(
rTargetModel,
_xComponent);
try
{
bool bOpaque = false;
@@ -156,7 +168,10 @@
break;
case OBJ_DLG_SUBREPORT:
case OBJ_OLE2:
pNewObj = OOle2Obj::Create( _xComponent,nType );
pNewObj = OOle2Obj::Create(
rTargetModel,
_xComponent,
nType);
break;
default:
OSL_FAIL("Unknown object id");
@@ -455,19 +470,21 @@
return xShape;
}
OCustomShape::OCustomShape(const uno::Reference< report::XReportComponent>& _xComponent
)
:SdrObjCustomShape()
,OObjectBase(_xComponent)
OCustomShape::OCustomShape(
SdrModel& rSdrModel,
const uno::Reference< report::XReportComponent>& _xComponent)
: SdrObjCustomShape(rSdrModel)
,OObjectBase(_xComponent)
{
impl_setUnoShape( uno::Reference< uno::XInterface >(_xComponent,uno::UNO_QUERY) );
m_bIsListening = true;
}
OCustomShape::OCustomShape(const OUString& _sComponentName)
:SdrObjCustomShape()
,OObjectBase(_sComponentName)
OCustomShape::OCustomShape(
SdrModel& rSdrModel,
const OUString& _sComponentName)
: SdrObjCustomShape(rSdrModel)
,OObjectBase(_sComponentName)
{
m_bIsListening = true;
}
@@ -500,8 +517,8 @@
if ( m_xReportComponent.is() )
{
OReportModel* pRptModel = static_cast<OReportModel*>(GetModel());
OXUndoEnvironment::OUndoEnvLock aLock(pRptModel->GetUndoEnv());
OReportModel& rRptModel(static_cast< OReportModel& >(getSdrModelFromSdrObject()));
OXUndoEnvironment::OUndoEnvLock aLock(rRptModel.GetUndoEnv());
m_xReportComponent->setPositionX(m_xReportComponent->getPositionX() + rSize.Width());
m_xReportComponent->setPositionY(m_xReportComponent->getPositionY() + rSize.Height());
}
@@ -533,13 +550,12 @@
bool bResult = SdrObjCustomShape::EndCreate(rStat, eCmd);
if ( bResult )
{
OReportModel* pRptModel = static_cast<OReportModel*>(GetModel());
if ( pRptModel )
{
OXUndoEnvironment::OUndoEnvLock aLock(pRptModel->GetUndoEnv());
if ( !m_xReportComponent.is() )
m_xReportComponent.set(getUnoShape(),uno::UNO_QUERY);
}
OReportModel& rRptModel(static_cast< OReportModel& >(getSdrModelFromSdrObject()));
OXUndoEnvironment::OUndoEnvLock aLock(rRptModel.GetUndoEnv());
if ( !m_xReportComponent.is() )
m_xReportComponent.set(getUnoShape(),uno::UNO_QUERY);
SetPropsFromRect(GetSnapRect());
}
@@ -558,8 +574,8 @@
uno::Reference< uno::XInterface> xShape = OObjectBase::getUnoShapeOf( *this );
if ( !m_xReportComponent.is() )
{
OReportModel* pRptModel = static_cast<OReportModel*>(GetModel());
OXUndoEnvironment::OUndoEnvLock aLock(pRptModel->GetUndoEnv());
OReportModel& rRptModel(static_cast< OReportModel& >(getSdrModelFromSdrObject()));
OXUndoEnvironment::OUndoEnvLock aLock(rRptModel.GetUndoEnv());
m_xReportComponent.set(xShape,uno::UNO_QUERY);
}
return xShape;
@@ -572,24 +588,27 @@
m_xReportComponent.clear();
}
OUnoObject::OUnoObject(const OUString& _sComponentName
,const OUString& rModelName
,sal_uInt16 _nObjectType)
:SdrUnoObj(rModelName)
,OObjectBase(_sComponentName)
,m_nObjectType(_nObjectType)
OUnoObject::OUnoObject(
SdrModel& rSdrModel,
const OUString& _sComponentName,
const OUString& rModelName,
sal_uInt16 _nObjectType)
: SdrUnoObj(rSdrModel, rModelName)
,OObjectBase(_sComponentName)
,m_nObjectType(_nObjectType)
{
if ( !rModelName.isEmpty() )
impl_initializeModel_nothrow();
}
OUnoObject::OUnoObject(const uno::Reference< report::XReportComponent>& _xComponent
,const OUString& rModelName
,sal_uInt16 _nObjectType)
:SdrUnoObj(rModelName)
,OObjectBase(_xComponent)
,m_nObjectType(_nObjectType)
OUnoObject::OUnoObject(
SdrModel& rSdrModel,
const uno::Reference< report::XReportComponent>& _xComponent,
const OUString& rModelName,
sal_uInt16 _nObjectType)
: SdrUnoObj(rSdrModel, rModelName)
,OObjectBase(_xComponent)
,m_nObjectType(_nObjectType)
{
impl_setUnoShape( uno::Reference< uno::XInterface >( _xComponent, uno::UNO_QUERY ) );
@@ -626,12 +645,8 @@
if ( m_xReportComponent.is() )
return;
OReportModel* pReportModel = static_cast<OReportModel*>(GetModel());
OSL_ENSURE( pReportModel, "OUnoObject::impl_setReportComponent_nothrow: no report model!" );
if ( !pReportModel )
return;
OXUndoEnvironment::OUndoEnvLock aLock( pReportModel->GetUndoEnv() );
OReportModel& rRptModel(static_cast< OReportModel& >(getSdrModelFromSdrObject()));
OXUndoEnvironment::OUndoEnvLock aLock( rRptModel.GetUndoEnv() );
m_xReportComponent.set(getUnoShape(),uno::UNO_QUERY);
impl_initializeModel_nothrow();
@@ -665,13 +680,14 @@
if ( m_xReportComponent.is() )
{
bool bUndoMode = false;
OReportModel* pRptModel = static_cast<OReportModel*>(GetModel());
if (pRptModel->GetUndoEnv().IsUndoMode())
OReportModel& rRptModel(static_cast< OReportModel& >(getSdrModelFromSdrObject()));
if (rRptModel.GetUndoEnv().IsUndoMode())
{
// if we are locked from outside, then we must not handle wrong moves, we are in UNDO mode
bUndoMode = true;
}
OXUndoEnvironment::OUndoEnvLock aLock(pRptModel->GetUndoEnv());
OXUndoEnvironment::OUndoEnvLock aLock(rRptModel.GetUndoEnv());
// LLA: why there exists getPositionX and getPositionY and NOT getPosition() which return a Point?
int nNewX = m_xReportComponent->getPositionX() + rSize.Width();
@@ -687,7 +703,7 @@
}
if (bPositionFixed)
{
GetModel()->AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoMoveObject(*this, aUndoSize));
getSdrModelFromSdrObject().AddUndo(getSdrModelFromSdrObject().GetSdrUndoFactory().CreateUndoMoveObject(*this, aUndoSize));
}
// set geometry properties
SetPropsFromRect(GetLogicRect());
@@ -867,6 +883,11 @@
releaseUnoShape();
}
OUnoObject* OUnoObject::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< OUnoObject >(pTargetModel);
}
OUnoObject& OUnoObject::operator=(const OUnoObject& rObj)
{
if( this == &rObj )
@@ -881,29 +902,28 @@
return *this;
}
OUnoObject* OUnoObject::Clone() const
{
return CloneHelper< OUnoObject >();
}
// OOle2Obj
OOle2Obj::OOle2Obj(const uno::Reference< report::XReportComponent>& _xComponent,sal_uInt16 _nType)
:SdrOle2Obj()
,OObjectBase(_xComponent)
,m_nType(_nType)
,m_bOnlyOnce(true)
OOle2Obj::OOle2Obj(
SdrModel& rSdrModel,
const uno::Reference< report::XReportComponent>& _xComponent,
sal_uInt16 _nType)
: SdrOle2Obj(rSdrModel)
,OObjectBase(_xComponent)
,m_nType(_nType)
,m_bOnlyOnce(true)
{
impl_setUnoShape( uno::Reference< uno::XInterface >( _xComponent, uno::UNO_QUERY ) );
m_bIsListening = true;
}
OOle2Obj::OOle2Obj(const OUString& _sComponentName,sal_uInt16 _nType)
:SdrOle2Obj()
,OObjectBase(_sComponentName)
,m_nType(_nType)
,m_bOnlyOnce(true)
OOle2Obj::OOle2Obj(
SdrModel& rSdrModel,
const OUString& _sComponentName,
sal_uInt16 _nType)
: SdrOle2Obj(rSdrModel)
,OObjectBase(_sComponentName)
,m_nType(_nType)
,m_bOnlyOnce(true)
{
m_bIsListening = true;
}
@@ -940,13 +960,14 @@
if ( m_xReportComponent.is() )
{
bool bUndoMode = false;
OReportModel* pRptModel = static_cast<OReportModel*>(GetModel());
if (pRptModel->GetUndoEnv().IsUndoMode())
OReportModel& rRptModel(static_cast< OReportModel& >(getSdrModelFromSdrObject()));
if (rRptModel.GetUndoEnv().IsUndoMode())
{
// if we are locked from outside, then we must not handle wrong moves, we are in UNDO mode
bUndoMode = true;
}
OXUndoEnvironment::OUndoEnvLock aLock(pRptModel->GetUndoEnv());
OXUndoEnvironment::OUndoEnvLock aLock(rRptModel.GetUndoEnv());
// LLA: why there exists getPositionX and getPositionY and NOT getPosition() which return a Point?
int nNewX = m_xReportComponent->getPositionX() + rSize.Width();
@@ -967,7 +988,7 @@
}
if (bPositionFixed)
{
GetModel()->AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoMoveObject(*this, aUndoSize));
getSdrModelFromSdrObject().AddUndo(getSdrModelFromSdrObject().GetSdrUndoFactory().CreateUndoMoveObject(*this, aUndoSize));
}
// set geometry properties
SetPropsFromRect(GetLogicRect());
@@ -1013,13 +1034,12 @@
bool bResult = SdrOle2Obj::EndCreate(rStat, eCmd);
if ( bResult )
{
OReportModel* pRptModel = static_cast<OReportModel*>(GetModel());
if ( pRptModel )
{
OXUndoEnvironment::OUndoEnvLock aLock(pRptModel->GetUndoEnv());
if ( !m_xReportComponent.is() )
m_xReportComponent.set(getUnoShape(),uno::UNO_QUERY);
}
OReportModel& rRptModel(static_cast< OReportModel& >(getSdrModelFromSdrObject()));
OXUndoEnvironment::OUndoEnvLock aLock(rRptModel.GetUndoEnv());
if ( !m_xReportComponent.is() )
m_xReportComponent.set(getUnoShape(),uno::UNO_QUERY);
// set geometry properties
SetPropsFromRect(GetLogicRect());
}
@@ -1038,8 +1058,8 @@
uno::Reference< uno::XInterface> xShape = OObjectBase::getUnoShapeOf( *this );
if ( !m_xReportComponent.is() )
{
OReportModel* pRptModel = static_cast<OReportModel*>(GetModel());
OXUndoEnvironment::OUndoEnvLock aLock(pRptModel->GetUndoEnv());
OReportModel& rRptModel(static_cast< OReportModel& >(getSdrModelFromSdrObject()));
OXUndoEnvironment::OUndoEnvLock aLock(rRptModel.GetUndoEnv());
m_xReportComponent.set(xShape,uno::UNO_QUERY);
}
return xShape;
@@ -1068,33 +1088,32 @@
return xSource;
}
// Clone() should make a complete copy of the object.
OOle2Obj* OOle2Obj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< OOle2Obj >(pTargetModel);
}
OOle2Obj& OOle2Obj::operator=(const OOle2Obj& rObj)
{
if( this == &rObj )
return *this;
SdrOle2Obj::operator=(rObj);
OReportModel* pRptModel = static_cast<OReportModel*>(rObj.GetModel());
OReportModel& rRptModel(static_cast< OReportModel& >(getSdrModelFromSdrObject()));
svt::EmbeddedObjectRef::TryRunningState( GetObjRef() );
impl_createDataProvider_nothrow(pRptModel->getReportDefinition().get());
impl_createDataProvider_nothrow(rRptModel.getReportDefinition().get());
uno::Reference< chart2::data::XDatabaseDataProvider > xSource( lcl_getDataProvider(rObj.GetObjRef()) );
uno::Reference< chart2::data::XDatabaseDataProvider > xDest( lcl_getDataProvider(GetObjRef()) );
if ( xSource.is() && xDest.is() )
comphelper::copyProperties(xSource.get(),xDest.get());
initializeChart(pRptModel->getReportDefinition().get());
initializeChart(rRptModel.getReportDefinition().get());
return *this;
}
// Clone() should make a complete copy of the object.
OOle2Obj* OOle2Obj::Clone() const
{
return CloneHelper< OOle2Obj >();
}
void OOle2Obj::impl_createDataProvider_nothrow(const uno::Reference< frame::XModel>& _xModel)
{
try
@@ -1123,8 +1142,8 @@
{
m_bOnlyOnce = false;
uno::Reference < embed::XEmbeddedObject > xObj = GetObjRef();
OReportModel* pRptModel = static_cast<OReportModel*>(GetModel());
pRptModel->GetUndoEnv().AddElement(lcl_getDataProvider(xObj));
OReportModel& rRptModel(static_cast< OReportModel& >(getSdrModelFromSdrObject()));
rRptModel.GetUndoEnv().AddElement(lcl_getDataProvider(xObj));
uno::Reference< embed::XComponentSupplier > xCompSupp( xObj, uno::UNO_QUERY );
if( xCompSupp.is() )
@@ -1155,8 +1174,8 @@
if ( !lcl_getDataProvider(xObj).is() )
impl_createDataProvider_nothrow(_xModel);
OReportModel* pRptModel = static_cast<OReportModel*>(GetModel());
pRptModel->GetUndoEnv().AddElement(lcl_getDataProvider(xObj));
OReportModel& rRptModel(static_cast< OReportModel& >(getSdrModelFromSdrObject()));
rRptModel.GetUndoEnv().AddElement(lcl_getDataProvider(xObj));
::comphelper::NamedValueCollection aArgs;
aArgs.put( "CellRangeRepresentation", uno::makeAny( OUString( "all" ) ) );
diff --git a/reportdesign/source/core/sdr/RptPage.cxx b/reportdesign/source/core/sdr/RptPage.cxx
index 0d3465e..b4e0980 100644
--- a/reportdesign/source/core/sdr/RptPage.cxx
+++ b/reportdesign/source/core/sdr/RptPage.cxx
@@ -28,48 +28,29 @@
{
using namespace ::com::sun::star;
OReportPage::OReportPage( OReportModel& _rModel
,const uno::Reference< report::XSection >& _xSection )
:SdrPage( _rModel, false/*bMasterPage*/ )
OReportPage::OReportPage(
OReportModel& _rModel,
const uno::Reference< report::XSection >& _xSection)
: SdrPage(_rModel, false/*bMasterPage*/)
,rModel(_rModel)
,m_xSection(_xSection)
,m_bSpecialInsertMode(false)
,m_bSpecialInsertMode(false)
{
}
OReportPage::OReportPage( const OReportPage& rPage )
:SdrPage( rPage )
,rModel(rPage.rModel)
,m_xSection(rPage.m_xSection)
,m_bSpecialInsertMode(rPage.m_bSpecialInsertMode)
,m_aTemporaryObjectList(rPage.m_aTemporaryObjectList)
{
}
OReportPage::~OReportPage()
{
}
SdrPage* OReportPage::Clone() const
SdrPage* OReportPage::Clone(SdrModel* pNewModel) const
{
return Clone(nullptr);
}
SdrPage* OReportPage::Clone( SdrModel* const pNewModel ) const
{
OReportPage *const pNewPage = new OReportPage( *this );
OReportModel* pReportModel = nullptr;
if ( pNewModel )
{
pReportModel = dynamic_cast<OReportModel*>( pNewModel );
assert( pReportModel );
}
pNewPage->lateInit( *this, pReportModel );
return pNewPage;
OReportModel& rOReportModel(static_cast< OReportModel& >(nullptr == pNewModel ? getSdrModelFromSdrPage() : *pNewModel));
OReportPage* pClonedOReportPage(
new OReportPage(
rOReportModel,
m_xSection));
pClonedOReportPage->SdrPage::lateInit(*this);
return pClonedOReportPage;
}
diff --git a/reportdesign/source/ui/inc/SectionView.hxx b/reportdesign/source/ui/inc/SectionView.hxx
index c5c4866..df3cbc7 100644
--- a/reportdesign/source/ui/inc/SectionView.hxx
+++ b/reportdesign/source/ui/inc/SectionView.hxx
@@ -42,7 +42,11 @@
void operator =(const OSectionView&) = delete;
public:
OSectionView( SdrModel* pModel, OReportSection* _pSectionWindow, OReportWindow* pEditor );
OSectionView(
SdrModel& rSdrModel,
OReportSection* _pSectionWindow,
OReportWindow* pEditor);
virtual ~OSectionView() override;
virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
diff --git a/reportdesign/source/ui/report/ReportController.cxx b/reportdesign/source/ui/report/ReportController.cxx
index 10e813d..84a8569 100644
--- a/reportdesign/source/ui/report/ReportController.cxx
+++ b/reportdesign/source/ui/report/ReportController.cxx
@@ -3107,7 +3107,11 @@
uno::Reference< report::XReportComponent> xShapeProp;
if ( _nObjectId == OBJ_CUSTOMSHAPE )
{
pNewControl = SdrObjFactory::MakeNewObject( SdrInventor::ReportDesign, _nObjectId, pSectionWindow->getReportSection().getPage(),m_aReportModel.get() );
pNewControl = SdrObjFactory::MakeNewObject(
*m_aReportModel,
SdrInventor::ReportDesign,
_nObjectId,
pSectionWindow->getReportSection().getPage());
xShapeProp.set(pNewControl->getUnoShape(),uno::UNO_QUERY);
OUString sCustomShapeType = getDesignView()->GetInsertObjString();
if ( sCustomShapeType.isEmpty() )
@@ -3117,7 +3121,11 @@
}
else if ( _nObjectId == OBJ_OLE2 || OBJ_DLG_SUBREPORT == _nObjectId )
{
pNewControl = SdrObjFactory::MakeNewObject( SdrInventor::ReportDesign, _nObjectId, pSectionWindow->getReportSection().getPage(),m_aReportModel.get() );
pNewControl = SdrObjFactory::MakeNewObject(
*m_aReportModel,
SdrInventor::ReportDesign,
_nObjectId,
pSectionWindow->getReportSection().getPage());
pNewControl->SetLogicRect(tools::Rectangle(3000,500,8000,5500)); // switch height and width
xShapeProp.set(pNewControl->getUnoShape(),uno::UNO_QUERY_THROW);
diff --git a/reportdesign/source/ui/report/ReportSection.cxx b/reportdesign/source/ui/report/ReportSection.cxx
index 9cca7d8..27e46710 100644
--- a/reportdesign/source/ui/report/ReportSection.cxx
+++ b/reportdesign/source/ui/report/ReportSection.cxx
@@ -183,7 +183,10 @@
m_pModel = m_pParent->getViewsWindow()->getView()->getReportView()->getController().getSdrModel();
m_pPage = m_pModel->getPage(m_xSection);
m_pView = new OSectionView( m_pModel.get(), this, m_pParent->getViewsWindow()->getView() );
m_pView = new OSectionView(
*m_pModel,
this,
m_pParent->getViewsWindow()->getView());
// #i93597# tell SdrPage that only left and right page border is defined
// instead of the full rectangle definition
@@ -262,10 +265,10 @@
SdrObject* pObject = pShape ? pShape->GetSdrObject() : nullptr;
if ( pObject )
{
SdrObject* pNewObj = pObject->Clone();
// Clone to target SdrModel
SdrObject* pNewObj(pObject->Clone(m_pModel.get()));
pNewObj->SetPage( m_pPage );
pNewObj->SetModel( m_pModel.get() );
m_pPage->InsertObject(pNewObj, SAL_MAX_SIZE);
tools::Rectangle aRet(VCLPoint((*pCopiesIter)->getPosition()),VCLSize((*pCopiesIter)->getSize()));
@@ -606,7 +609,7 @@
{
const SfxItemSet& rSource = pSourceObj->GetMergedItemSet();
SfxItemSet aDest(
_pObj->GetModel()->GetItemPool(),
_pObj->getSdrModelFromSdrObject().GetItemPool(),
svl::Items<
// Ranges from SdrAttrObj:
SDRATTR_START, SDRATTR_SHADOW_LAST,
diff --git a/reportdesign/source/ui/report/SectionView.cxx b/reportdesign/source/ui/report/SectionView.cxx
index 06b594f..ea01291 100644
--- a/reportdesign/source/ui/report/SectionView.cxx
+++ b/reportdesign/source/ui/report/SectionView.cxx
@@ -34,9 +34,11 @@
{
using namespace ::com::sun::star;
OSectionView::OSectionView( SdrModel* pModel, OReportSection* _pSectionWindow, OReportWindow* pEditor )
:SdrView( pModel, _pSectionWindow )
OSectionView::OSectionView(
SdrModel& rSdrModel,
OReportSection* _pSectionWindow,
OReportWindow* pEditor)
: SdrView(rSdrModel, _pSectionWindow)
,m_pReportWindow( pEditor )
,m_pSectionWindow(_pSectionWindow)
{
diff --git a/reportdesign/source/ui/report/ViewsWindow.cxx b/reportdesign/source/ui/report/ViewsWindow.cxx
index 341dc46..72f74f2 100644
--- a/reportdesign/source/ui/report/ViewsWindow.cxx
+++ b/reportdesign/source/ui/report/ViewsWindow.cxx
@@ -1015,9 +1015,11 @@
if ( &rView != &_rSection )
{
SdrObject *pNewObj = new SdrUnoObj("com.sun.star.form.component.FixedText");
pNewObj->SetLogicRect(_aRect);
SdrObject *pNewObj = new SdrUnoObj(
rView.getSdrModelFromSdrView(),
"com.sun.star.form.component.FixedText");
pNewObj->SetLogicRect(_aRect);
pNewObj->Move(Size(0, aNewPos.Y()));
bool bChanged = rView.GetModel()->IsChanged();
rReportSection.getPage()->InsertObject(pNewObj);
diff --git a/reportdesign/source/ui/report/dlgedfac.cxx b/reportdesign/source/ui/report/dlgedfac.cxx
index 1a59852..4a416838 100644
--- a/reportdesign/source/ui/report/dlgedfac.cxx
+++ b/reportdesign/source/ui/report/dlgedfac.cxx
@@ -47,29 +47,30 @@
DlgEdFactory, MakeObject, SdrObjCreatorParams, aParams, SdrObject* )
{
SdrObject* pNewObj = nullptr;
if ( aParams.nInventor == SdrInventor::ReportDesign )
{
switch( aParams.nObjIdentifier )
{
case OBJ_DLG_FIXEDTEXT:
pNewObj = new OUnoObject( SERVICE_FIXEDTEXT
pNewObj = new OUnoObject(aParams.rSdrModel, SERVICE_FIXEDTEXT
,OUString("com.sun.star.form.component.FixedText")
,OBJ_DLG_FIXEDTEXT);
break;
case OBJ_DLG_IMAGECONTROL:
pNewObj = new OUnoObject( SERVICE_IMAGECONTROL
pNewObj = new OUnoObject(aParams.rSdrModel, SERVICE_IMAGECONTROL
,OUString("com.sun.star.form.component.DatabaseImageControl")
,OBJ_DLG_IMAGECONTROL);
break;
case OBJ_DLG_FORMATTEDFIELD:
pNewObj = new OUnoObject( SERVICE_FORMATTEDFIELD
pNewObj = new OUnoObject(aParams.rSdrModel, SERVICE_FORMATTEDFIELD
,OUString("com.sun.star.form.component.FormattedField")
,OBJ_DLG_FORMATTEDFIELD);
break;
case OBJ_DLG_VFIXEDLINE:
case OBJ_DLG_HFIXEDLINE:
{
OUnoObject* pObj = new OUnoObject( SERVICE_FIXEDLINE
OUnoObject* pObj = new OUnoObject(aParams.rSdrModel, SERVICE_FIXEDLINE
,OUString("com.sun.star.awt.UnoControlFixedLineModel")
,aParams.nObjIdentifier);
pNewObj = pObj;
@@ -81,13 +82,13 @@
}
break;
case OBJ_CUSTOMSHAPE:
pNewObj = new OCustomShape(SERVICE_SHAPE);
pNewObj = new OCustomShape(aParams.rSdrModel, SERVICE_SHAPE);
break;
case OBJ_DLG_SUBREPORT:
pNewObj = new OOle2Obj(SERVICE_REPORTDEFINITION,OBJ_DLG_SUBREPORT);
pNewObj = new OOle2Obj(aParams.rSdrModel, SERVICE_REPORTDEFINITION, OBJ_DLG_SUBREPORT);
break;
case OBJ_OLE2:
pNewObj = new OOle2Obj(OUString("com.sun.star.chart2.ChartDocument"),OBJ_OLE2);
pNewObj = new OOle2Obj(aParams.rSdrModel, OUString("com.sun.star.chart2.ChartDocument"),OBJ_OLE2);
break;
default:
OSL_FAIL("Unknown object id");
diff --git a/reportdesign/source/ui/report/dlgedfunc.cxx b/reportdesign/source/ui/report/dlgedfunc.cxx
index c66e3d0..0c465d1 100644
--- a/reportdesign/source/ui/report/dlgedfunc.cxx
+++ b/reportdesign/source/ui/report/dlgedfunc.cxx
@@ -450,18 +450,15 @@
uno::Reference<report::XReportComponent> xComponent = pObj->getReportComponent();
if (xComponent.is() && xComponent != m_xOverlappingObj)
{
OReportModel* pRptModel = static_cast<OReportModel*>(_pOverlappedObj->GetModel());
if ( pRptModel )
{
OXUndoEnvironment::OUndoEnvLock aLock(pRptModel->GetUndoEnv());
OReportModel& rRptModel(static_cast< OReportModel& >(_pOverlappedObj->getSdrModelFromSdrObject()));
OXUndoEnvironment::OUndoEnvLock aLock(rRptModel.GetUndoEnv());
// uncolorize an old object, if there is one
unColorizeOverlappedObj();
// uncolorize an old object, if there is one
unColorizeOverlappedObj();
m_nOldColor = lcl_setColorOfObject(xComponent, m_nOverlappedControlColor);
m_xOverlappingObj = xComponent;
m_pOverlappingObj = _pOverlappedObj;
}
m_nOldColor = lcl_setColorOfObject(xComponent, m_nOverlappedControlColor);
m_xOverlappingObj = xComponent;
m_pOverlappingObj = _pOverlappedObj;
}
}
}
@@ -471,15 +468,12 @@
// uncolorize an old object, if there is one
if (m_xOverlappingObj.is())
{
OReportModel* pRptModel = static_cast<OReportModel*>(m_pOverlappingObj->GetModel());
if ( pRptModel )
{
OXUndoEnvironment::OUndoEnvLock aLock(pRptModel->GetUndoEnv());
OReportModel& rRptModel(static_cast< OReportModel& >(m_pOverlappingObj->getSdrModelFromSdrObject()));
OXUndoEnvironment::OUndoEnvLock aLock(rRptModel.GetUndoEnv());
lcl_setColorOfObject(m_xOverlappingObj, m_nOldColor);
m_xOverlappingObj = nullptr;
m_pOverlappingObj = nullptr;
}
lcl_setColorOfObject(m_xOverlappingObj, m_nOldColor);
m_xOverlappingObj = nullptr;
m_pOverlappingObj = nullptr;
}
}
diff --git a/sc/inc/docuno.hxx b/sc/inc/docuno.hxx
index f86c904..8c7382c 100644
--- a/sc/inc/docuno.hxx
+++ b/sc/inc/docuno.hxx
@@ -124,6 +124,9 @@
protected:
const SfxItemPropertySet& GetPropertySet() const { return aPropSet; }
/** abstract SdrModel provider */
virtual SdrModel* getSdrModelFromUnoModel() const override;
public:
ScModelObj(ScDocShell* pDocSh);
virtual ~ScModelObj() override;
diff --git a/sc/inc/drawpage.hxx b/sc/inc/drawpage.hxx
index 8f93482..cbbaff9 100644
--- a/sc/inc/drawpage.hxx
+++ b/sc/inc/drawpage.hxx
@@ -24,21 +24,18 @@
class ScDrawLayer;
class ScDrawPage: public FmFormPage
class ScDrawPage : public FmFormPage
{
ScDrawPage& operator=(const ScDrawPage&) = delete;
ScDrawPage(const ScDrawPage&) = delete;
public:
explicit ScDrawPage(ScDrawLayer& rNewModel, bool bMasterPage);
virtual ~ScDrawPage() override;
virtual ScDrawPage* Clone() const override;
virtual ScDrawPage* Clone(SdrModel* pNewModel) const override;
virtual ScDrawPage* Clone(SdrModel* pNewModel = nullptr) const override;
virtual css::uno::Reference< css::uno::XInterface > createUnoPage() override;
private:
ScDrawPage(const ScDrawPage& rSrcPage);
};
#endif
diff --git a/sc/qa/extras/anchor.cxx b/sc/qa/extras/anchor.cxx
index e1130b7..baa609a 100644
--- a/sc/qa/extras/anchor.cxx
+++ b/sc/qa/extras/anchor.cxx
@@ -170,7 +170,7 @@
// Add a circle somewhere below first row.
const tools::Rectangle aOrigRect = tools::Rectangle(1000, 1000, 1200, 1200);
SdrCircObj* pObj = new SdrCircObj(OBJ_CIRC, aOrigRect);
SdrCircObj* pObj = new SdrCircObj(*pDrawLayer, OBJ_CIRC, aOrigRect);
pPage->InsertObject(pObj);
// Anchor to cell
ScDrawLayer::SetCellAnchoredFromPosition(*pObj, rDoc, 0, false);
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index eff48bf..907c8f6 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -2708,7 +2708,7 @@
{
//Add a square
tools::Rectangle aOrigRect(2,2,100,100);
SdrRectObj *pObj = new SdrRectObj(aOrigRect);
SdrRectObj *pObj = new SdrRectObj(*pDrawLayer, aOrigRect);
pPage->InsertObject(pObj);
const tools::Rectangle &rNewRect = pObj->GetLogicRect();
CPPUNIT_ASSERT_EQUAL_MESSAGE("must have equal position and size",
@@ -2749,7 +2749,7 @@
{
// Add a circle.
tools::Rectangle aOrigRect = tools::Rectangle(10,10,210,210); // 200 x 200
SdrCircObj* pObj = new SdrCircObj(OBJ_CIRC, aOrigRect);
SdrCircObj* pObj = new SdrCircObj(*pDrawLayer, OBJ_CIRC, aOrigRect);
pPage->InsertObject(pObj);
const tools::Rectangle& rNewRect = pObj->GetLogicRect();
CPPUNIT_ASSERT_EQUAL_MESSAGE("Position and size of the circle shouldn't change when inserted into the page.",
@@ -2781,7 +2781,7 @@
tools::Rectangle aOrigRect(10,200,110,300); // 100 x 100
aTempPoly.append(basegfx::B2DPoint(aStartPos.X(), aStartPos.Y()));
aTempPoly.append(basegfx::B2DPoint(aEndPos.X(), aEndPos.Y()));
SdrPathObj* pObj = new SdrPathObj(OBJ_LINE, basegfx::B2DPolyPolygon(aTempPoly));
SdrPathObj* pObj = new SdrPathObj(*pDrawLayer, OBJ_LINE, basegfx::B2DPolyPolygon(aTempPoly));
pObj->NbcSetLogicRect(aOrigRect);
pPage->InsertObject(pObj);
const tools::Rectangle& rNewRect = pObj->GetLogicRect();
@@ -2822,7 +2822,7 @@
// Insert an object.
tools::Rectangle aObjRect(2,2,100,100);
SdrObject* pObj = new SdrRectObj(aObjRect);
SdrObject* pObj = new SdrRectObj(*pDrawLayer, aObjRect);
pPage->InsertObject(pObj);
ScDrawLayer::SetCellAnchoredFromPosition(*pObj, *m_pDoc, 0, false);
@@ -5342,7 +5342,7 @@
SdrCaptionObj* pCaption = pNote->GetOrCreateCaption(aPos);
CPPUNIT_ASSERT_MESSAGE("Failed to create a caption object.", pCaption);
CPPUNIT_ASSERT_EQUAL_MESSAGE("This caption should belong to the drawing layer of the document.",
m_pDoc->GetDrawLayer(), static_cast<ScDrawLayer*>(pCaption->GetModel()));
m_pDoc->GetDrawLayer(), static_cast<ScDrawLayer*>(&pCaption->getSdrModelFromSdrObject()));
// Copy B2 with note to a clipboard.
@@ -5648,7 +5648,7 @@
tools::Rectangle aRect( 4000, 5000, 10000, 7000 );
tools::Rectangle aRotRect( 6000, 3000, 8000, 9000 );
SdrRectObj *pObj = new SdrRectObj(aRect);
SdrRectObj *pObj = new SdrRectObj(*pDrawLayer, aRect);
pPage->InsertObject(pObj);
Point aRef1(pObj->GetSnapRect().Center());
int nAngle = 9000; //90 deg.
@@ -6421,7 +6421,7 @@
// Insert an object.
tools::Rectangle aObjRect(2,1000,100,1100);
SdrObject* pObj = new SdrRectObj(aObjRect);
SdrObject* pObj = new SdrRectObj(*pDrawLayer, aObjRect);
pPage->InsertObject(pObj);
ScDrawLayer::SetCellAnchoredFromPosition(*pObj, *m_pDoc, 0, false);
diff --git a/sc/qa/unit/ucalc_sort.cxx b/sc/qa/unit/ucalc_sort.cxx
index 048b53b..38c3e1a 100644
--- a/sc/qa/unit/ucalc_sort.cxx
+++ b/sc/qa/unit/ucalc_sort.cxx
@@ -1911,7 +1911,7 @@
// Insert graphic in cell B2.
const tools::Rectangle aOrigRect = tools::Rectangle(1000, 1000, 1200, 1200);
SdrCircObj* pObj = new SdrCircObj(OBJ_CIRC, aOrigRect);
SdrCircObj* pObj = new SdrCircObj(*pDrawLayer, OBJ_CIRC, aOrigRect);
SdrPage* pPage = pDrawLayer->GetPage(0);
CPPUNIT_ASSERT(pPage);
pPage->InsertObject(pObj);
diff --git a/sc/source/core/data/documen9.cxx b/sc/source/core/data/documen9.cxx
index 70b99bd..8b9b4de 100644
--- a/sc/source/core/data/documen9.cxx
+++ b/sc/source/core/data/documen9.cxx
@@ -84,11 +84,9 @@
SdrObject* pOldObject = aIter.Next();
while (pOldObject)
{
SdrObject* pNewObject = pOldObject->Clone();
// SdrObject* pNewObject = pOldObject->Clone( pNewPage, mpDrawLayer );
pNewObject->SetModel(mpDrawLayer);
// Clone to target SdrModel
SdrObject* pNewObject = pOldObject->Clone(mpDrawLayer);
pNewObject->SetPage(pNewPage);
pNewObject->NbcMove(Size(0,0));
pNewPage->InsertObject( pNewObject );
diff --git a/sc/source/core/data/drawpage.cxx b/sc/source/core/data/drawpage.cxx
index 5d44598..5ccd3cd 100644
--- a/sc/source/core/data/drawpage.cxx
+++ b/sc/source/core/data/drawpage.cxx
@@ -24,37 +24,25 @@
#include <document.hxx>
#include <pageuno.hxx>
ScDrawPage::ScDrawPage(ScDrawLayer& rNewModel, bool bMasterPage) :
FmFormPage(rNewModel, bMasterPage)
ScDrawPage::ScDrawPage(ScDrawLayer& rNewModel, bool bMasterPage)
: FmFormPage(rNewModel, bMasterPage)
{
SetSize( Size( RECT_MAX, RECT_MAX ) );
}
ScDrawPage::ScDrawPage(const ScDrawPage& rSrcPage)
: FmFormPage(rSrcPage)
{
}
ScDrawPage::~ScDrawPage()
{
}
ScDrawPage* ScDrawPage::Clone() const
{
return Clone(nullptr);
}
ScDrawPage* ScDrawPage::Clone(SdrModel* const pNewModel) const
{
ScDrawPage* const pNewPage = new ScDrawPage(*this);
FmFormModel* pScDrawModel = nullptr;
if (pNewModel)
{
pScDrawModel = dynamic_cast<FmFormModel*>(pNewModel);
assert(pScDrawModel);
}
pNewPage->lateInit(*this, pScDrawModel);
return pNewPage;
ScDrawLayer& rScDrawLayer(static_cast< ScDrawLayer& >(nullptr == pNewModel ? getSdrModelFromSdrPage() : *pNewModel));
ScDrawPage* pClonedScDrawPage(
new ScDrawPage(
rScDrawLayer,
IsMasterPage()));
pClonedScDrawPage->FmFormPage::lateInit(*this);
return pClonedScDrawPage;
}
css::uno::Reference< css::uno::XInterface > ScDrawPage::createUnoPage()
diff --git a/sc/source/core/data/drwlayer.cxx b/sc/source/core/data/drwlayer.cxx
index e694fed..0665e09 100644
--- a/sc/source/core/data/drwlayer.cxx
+++ b/sc/source/core/data/drwlayer.cxx
@@ -155,10 +155,10 @@
void ScUndoAnchorData::Undo()
{
// Trigger Object Change
if (pObj->IsInserted() && pObj->GetPage() && pObj->GetModel())
if (pObj->IsInserted() && pObj->GetPage())
{
SdrHint aHint(SdrHintKind::ObjectChange, *pObj);
pObj->GetModel()->Broadcast(aHint);
pObj->getSdrModelFromSdrObject().Broadcast(aHint);
}
if (mbWasCellAnchored)
@@ -175,10 +175,10 @@
ScDrawLayer::SetCellAnchoredFromPosition(*pObj, *mpDoc, mnTab, mbWasResizeWithCell);
// Trigger Object Change
if (pObj->IsInserted() && pObj->GetPage() && pObj->GetModel())
if (pObj->IsInserted() && pObj->GetPage())
{
SdrHint aHint(SdrHintKind::ObjectChange, *pObj);
pObj->GetModel()->Broadcast(aHint);
pObj->getSdrModelFromSdrObject().Broadcast(aHint);
}
}
@@ -463,10 +463,10 @@
pOldData->maStart.SetTab(nOldTab);
pOldData->maEnd.SetTab(nOldTab);
}
SdrObject* pNewObject = pOldObject->Clone();
pNewObject->SetModel(this);
pNewObject->SetPage(pNewPage);
// Clone to target SdrModel
SdrObject* pNewObject = pOldObject->Clone(this);
pNewObject->SetPage(pNewPage);
pNewObject->NbcMove(Size(0,0));
pNewPage->InsertObject( pNewObject );
ScDrawObjData* pNewData = GetObjData(pNewObject);
@@ -1492,8 +1492,8 @@
OSL_ENSURE( pDestPage, "no page" );
if (pDestPage)
{
SdrObject* pNewObject = pOldObject->Clone();
pNewObject->SetModel(pDestModel);
// Clone to target SdrModel
SdrObject* pNewObject = pOldObject->Clone(pDestModel);
pNewObject->SetPage(pDestPage);
uno::Reference< chart2::XChartDocument > xOldChart( ScChartHelper::GetChartFromSdrObject( pOldObject ) );
@@ -1667,8 +1667,8 @@
if (bObjectInArea && (pOldObject->GetLayer() != SC_LAYER_INTERN)
&& !IsNoteCaption(pOldObject))
{
SdrObject* pNewObject = pOldObject->Clone();
pNewObject->SetModel(this);
// Clone to target SdrModel
SdrObject* pNewObject = pOldObject->Clone(this);
pNewObject->SetPage(pDestPage);
if ( bMirrorObj )
diff --git a/sc/source/core/data/postit.cxx b/sc/source/core/data/postit.cxx
index d70e87f..676a0da 100644
--- a/sc/source/core/data/postit.cxx
+++ b/sc/source/core/data/postit.cxx
@@ -375,7 +375,11 @@
// create the caption drawing object
tools::Rectangle aTextRect( Point( 0 , 0 ), Size( SC_NOTECAPTION_WIDTH, SC_NOTECAPTION_HEIGHT ) );
Point aTailPos = CalcTailPos( bTailFront );
mxCaption.reset( new SdrCaptionObj( aTextRect, aTailPos ));
mxCaption.reset(
new SdrCaptionObj(
*mrDoc.GetDrawLayer(), // TTTT should ret a ref?
aTextRect,
aTailPos));
// basic caption settings
ScCaptionUtil::SetBasicCaptionSettings( *mxCaption, bShown );
}
@@ -754,7 +758,7 @@
bool bRecording = false;
if (!bIgnoreUndo)
{
ScDrawLayer* pDrawLayer = dynamic_cast<ScDrawLayer*>(mpCaption->GetModel());
ScDrawLayer* pDrawLayer(dynamic_cast< ScDrawLayer* >(&mpCaption->getSdrModelFromSdrObject()));
SAL_WARN_IF( !pDrawLayer, "sc.core", "ScCaptionPtr::removeFromDrawPageAndFree - object without drawing layer");
// create drawing undo action (before removing the object to have valid draw page in undo action)
bRecording = (pDrawLayer && pDrawLayer->IsRecording());
@@ -1137,8 +1141,9 @@
/* Remove caption object only, if this note is its owner (e.g. notes in
undo documents refer to captions in original document, do not remove
them from drawing layer here). */
// TTTT maybe no longer needed - can that still happen?
ScDrawLayer* pDrawLayer = mrDoc.GetDrawLayer();
if (pDrawLayer == maNoteData.mxCaption->GetModel())
if (pDrawLayer == &maNoteData.mxCaption->getSdrModelFromSdrObject())
maNoteData.mxCaption.removeFromDrawPageAndFree();
SAL_INFO("sc.core","ScPostIt::RemoveCaption - refs: " << maNoteData.mxCaption.getRefs() <<
diff --git a/sc/source/core/tool/detfunc.cxx b/sc/source/core/tool/detfunc.cxx
index f8f5ac0..77f19b2 100644
--- a/sc/source/core/tool/detfunc.cxx
+++ b/sc/source/core/tool/detfunc.cxx
@@ -453,7 +453,9 @@
// insert the rectangle before the arrow - this is relied on in FindFrameForObject
tools::Rectangle aRect = GetDrawRect( nRefStartCol, nRefStartRow, nRefEndCol, nRefEndRow );
SdrRectObj* pBox = new SdrRectObj( aRect );
SdrRectObj* pBox = new SdrRectObj(
*pModel,
aRect);
pBox->SetMergedItemSetAndBroadcast(rData.GetBoxSet());
@@ -494,7 +496,10 @@
basegfx::B2DPolygon aTempPoly;
aTempPoly.append(basegfx::B2DPoint(aStartPos.X(), aStartPos.Y()));
aTempPoly.append(basegfx::B2DPoint(aEndPos.X(), aEndPos.Y()));
SdrPathObj* pArrow = new SdrPathObj(OBJ_LINE, basegfx::B2DPolyPolygon(aTempPoly));
SdrPathObj* pArrow = new SdrPathObj(
*pModel,
OBJ_LINE,
basegfx::B2DPolyPolygon(aTempPoly));
pArrow->NbcSetLogicRect(tools::Rectangle(aStartPos,aEndPos)); //TODO: needed ???
pArrow->SetMergedItemSetAndBroadcast(rAttrSet);
@@ -526,7 +531,9 @@
if (bArea)
{
tools::Rectangle aRect = GetDrawRect( nStartCol, nStartRow, nEndCol, nEndRow );
SdrRectObj* pBox = new SdrRectObj( aRect );
SdrRectObj* pBox = new SdrRectObj(
*pModel,
aRect);
pBox->SetMergedItemSetAndBroadcast(rData.GetBoxSet());
@@ -559,7 +566,10 @@
basegfx::B2DPolygon aTempPoly;
aTempPoly.append(basegfx::B2DPoint(aStartPos.X(), aStartPos.Y()));
aTempPoly.append(basegfx::B2DPoint(aEndPos.X(), aEndPos.Y()));
SdrPathObj* pArrow = new SdrPathObj(OBJ_LINE, basegfx::B2DPolyPolygon(aTempPoly));
SdrPathObj* pArrow = new SdrPathObj(
*pModel,
OBJ_LINE,
basegfx::B2DPolyPolygon(aTempPoly));
pArrow->NbcSetLogicRect(tools::Rectangle(aStartPos,aEndPos)); //TODO: needed ???
pArrow->SetMergedItemSetAndBroadcast(rAttrSet);
@@ -625,7 +635,10 @@
aRect.AdjustTop( -70 );
aRect.AdjustBottom(70 );
SdrCircObj* pCircle = new SdrCircObj( OBJ_CIRC, aRect );
SdrCircObj* pCircle = new SdrCircObj(
*pModel,
OBJ_CIRC,
aRect);
SfxItemSet& rAttrSet = rData.GetCircleSet();
pCircle->SetMergedItemSetAndBroadcast(rAttrSet);
diff --git a/sc/source/filter/excel/xichart.cxx b/sc/source/filter/excel/xichart.cxx
index cad44b7..055663d 100644
--- a/sc/source/filter/excel/xichart.cxx
+++ b/sc/source/filter/excel/xichart.cxx
@@ -4221,7 +4221,7 @@
Reference< XDrawPageSupplier > xDrawPageSupp( rxModel, UNO_QUERY_THROW );
Reference< XDrawPage > xDrawPage( xDrawPageSupp->getDrawPage(), UNO_SET_THROW );
pSdrPage = ::GetSdrPageFromXDrawPage( xDrawPage );
pSdrModel = pSdrPage ? pSdrPage->GetModel() : nullptr;
pSdrModel = pSdrPage ? &pSdrPage->getSdrModelFromSdrPage() : nullptr;
}
catch( Exception& )
{
diff --git a/sc/source/filter/excel/xiescher.cxx b/sc/source/filter/excel/xiescher.cxx
index 94b2d01..989c9b6 100644
--- a/sc/source/filter/excel/xiescher.cxx
+++ b/sc/source/filter/excel/xiescher.cxx
@@ -425,8 +425,7 @@
else
{
xSdrObj = DoCreateSdrObj( rDffConv, rAnchorRect );
if( xSdrObj )
xSdrObj->SetModel( rDffConv.GetModel() );
//added for exporting OCX control
/* mnObjType value set should be as below table:
0x0000 Group 0x0001 Line
@@ -1012,7 +1011,9 @@
SdrObjectPtr XclImpGroupObj::DoCreateSdrObj( XclImpDffConverter& rDffConv, const tools::Rectangle& /*rAnchorRect*/ ) const
{
std::unique_ptr<SdrObjGroup, SdrObjectFree> xSdrObj( new SdrObjGroup );
std::unique_ptr<SdrObjGroup, SdrObjectFree> xSdrObj(
new SdrObjGroup(
*GetDoc().GetDrawLayer()));
// child objects in BIFF2-BIFF5 have absolute size, not needed to pass own anchor rectangle
SdrObjList& rObjList = *xSdrObj->GetSubList(); // SdrObjGroup always returns existing sublist
for( ::std::vector< XclImpDrawObjRef >::const_iterator aIt = maChildren.begin(), aEnd = maChildren.end(); aIt != aEnd; ++aIt )
@@ -1080,7 +1081,11 @@
aB2DPolygon.append( ::basegfx::B2DPoint( rAnchorRect.Right(), rAnchorRect.Top() ) );
break;
}
SdrObjectPtr xSdrObj( new SdrPathObj( OBJ_LINE, ::basegfx::B2DPolyPolygon( aB2DPolygon ) ) );
SdrObjectPtr xSdrObj(
new SdrPathObj(
*GetDoc().GetDrawLayer(),
OBJ_LINE,
::basegfx::B2DPolyPolygon(aB2DPolygon)));
ConvertLineStyle( *xSdrObj, maLineData );
// line ends
@@ -1195,7 +1200,10 @@
SdrObjectPtr XclImpRectObj::DoCreateSdrObj( XclImpDffConverter& rDffConv, const tools::Rectangle& rAnchorRect ) const
{
SdrObjectPtr xSdrObj( new SdrRectObj( rAnchorRect ) );
SdrObjectPtr xSdrObj(
new SdrRectObj(
*GetDoc().GetDrawLayer(),
rAnchorRect));
ConvertRectStyle( *xSdrObj );
rDffConv.Progress();
return xSdrObj;
@@ -1208,7 +1216,11 @@
SdrObjectPtr XclImpOvalObj::DoCreateSdrObj( XclImpDffConverter& rDffConv, const tools::Rectangle& rAnchorRect ) const
{
SdrObjectPtr xSdrObj( new SdrCircObj( OBJ_CIRC, rAnchorRect ) );
SdrObjectPtr xSdrObj(
new SdrCircObj(
*GetDoc().GetDrawLayer(),
OBJ_CIRC,
rAnchorRect));
ConvertRectStyle( *xSdrObj );
rDffConv.Progress();
return xSdrObj;
@@ -1280,7 +1292,13 @@
break;
}
SdrObjKind eObjKind = maFillData.IsFilled() ? OBJ_SECT : OBJ_CARC;
SdrObjectPtr xSdrObj( new SdrCircObj( eObjKind, aNewRect, nStartAngle, nEndAngle ) );
SdrObjectPtr xSdrObj(
new SdrCircObj(
*GetDoc().GetDrawLayer(),
eObjKind,
aNewRect,
nStartAngle,
nEndAngle));
ConvertFillStyle( *xSdrObj, maFillData );
ConvertLineStyle( *xSdrObj, maLineData );
rDffConv.Progress();
@@ -1358,7 +1376,11 @@
aB2DPolygon.append( lclGetPolyPoint( rAnchorRect, maCoords.front() ) );
// create the SdrObject
SdrObjKind eObjKind = maFillData.IsFilled() ? OBJ_PATHPOLY : OBJ_PATHPLIN;
xSdrObj.reset( new SdrPathObj( eObjKind, ::basegfx::B2DPolyPolygon( aB2DPolygon ) ) );
xSdrObj.reset(
new SdrPathObj(
*GetDoc().GetDrawLayer(),
eObjKind,
::basegfx::B2DPolyPolygon(aB2DPolygon)));
ConvertRectStyle( *xSdrObj );
}
rDffConv.Progress();
@@ -1420,7 +1442,9 @@
SdrObjectPtr XclImpTextObj::DoCreateSdrObj( XclImpDffConverter& rDffConv, const tools::Rectangle& rAnchorRect ) const
{
std::unique_ptr<SdrObjCustomShape, SdrObjectFree> xSdrObj( new SdrObjCustomShape );
std::unique_ptr<SdrObjCustomShape, SdrObjectFree> xSdrObj(
new SdrObjCustomShape(
*GetDoc().GetDrawLayer()));
xSdrObj->NbcSetSnapRect( rAnchorRect );
OUString aRectType = "rectangle";
xSdrObj->MergeDefaultAttributes( &aRectType );
@@ -1710,7 +1734,12 @@
// ChartHelper::AdaptDefaultsForChart( xEmbObj );
// create the container OLE object
xSdrObj.reset( new SdrOle2Obj( svt::EmbeddedObjectRef( xEmbObj, nAspect ), aEmbObjName, rAnchorRect ) );
xSdrObj.reset(
new SdrOle2Obj(
*GetDoc().GetDrawLayer(),
svt::EmbeddedObjectRef(xEmbObj, nAspect),
aEmbObjName,
rAnchorRect));
}
return xSdrObj;
@@ -2953,7 +2982,11 @@
// no OLE - create a plain picture from IMGDATA record data
if( !xSdrObj && (maGraphic.GetType() != GraphicType::NONE) )
{
xSdrObj.reset( new SdrGrafObj( maGraphic, rAnchorRect ) );
xSdrObj.reset(
new SdrGrafObj(
*GetDoc().GetDrawLayer(),
maGraphic,
rAnchorRect));
ConvertRectStyle( *xSdrObj );
}
@@ -3434,9 +3467,20 @@
ErrCode nError = ERRCODE_NONE;
namespace cssea = ::com::sun::star::embed::Aspects;
sal_Int64 nAspects = rPicObj.IsSymbol() ? cssea::MSOLE_ICON : cssea::MSOLE_CONTENT;
xSdrObj.reset( CreateSdrOLEFromStorage(
aStrgName, xSrcStrg, pDocShell->GetStorage(), aGraphic,
rAnchorRect, aVisArea, nullptr, nError, mnOleImpFlags, nAspects, GetRoot().GetMedium().GetBaseURL()) );
xSdrObj.reset(
CreateSdrOLEFromStorage(
GetConvData().mrSdrModel,
aStrgName,
xSrcStrg,
pDocShell->GetStorage(),
aGraphic,
rAnchorRect,
aVisArea,
nullptr,
nError,
mnOleImpFlags,
nAspects,
GetRoot().GetMedium().GetBaseURL()));
}
}
}
diff --git a/sc/source/filter/html/htmlexp2.cxx b/sc/source/filter/html/htmlexp2.cxx
index a6b73fd..d688774 100644
--- a/sc/source/filter/html/htmlexp2.cxx
+++ b/sc/source/filter/html/htmlexp2.cxx
@@ -165,8 +165,7 @@
break;
default:
{
Graphic aGraph( SdrExchangeView::GetObjGraphic(
pDoc->GetDrawLayer(), pObject ) );
Graphic aGraph(SdrExchangeView::GetObjGraphic(*pObject));
OUString aLinkName;
WriteImage( aLinkName, aGraph, aOpt );
pE->bWritten = true;
diff --git a/sc/source/filter/rtf/eeimpars.cxx b/sc/source/filter/rtf/eeimpars.cxx
index d691530..e553df1 100644
--- a/sc/source/filter/rtf/eeimpars.cxx
+++ b/sc/source/filter/rtf/eeimpars.cxx
@@ -602,7 +602,11 @@
if ( pI->pGraphic )
{
tools::Rectangle aRect ( aInsertPos, aLogicSize );
SdrGrafObj* pObj = new SdrGrafObj( *pI->pGraphic, aRect );
SdrGrafObj* pObj = new SdrGrafObj(
*pModel,
*pI->pGraphic,
aRect);
// calling SetGraphicLink here doesn't work
pObj->SetName( pI->aURL );
diff --git a/sc/source/ui/app/drwtrans.cxx b/sc/source/ui/app/drwtrans.cxx
index 1e4c9c8..12cfa00 100644
--- a/sc/source/ui/app/drwtrans.cxx
+++ b/sc/source/ui/app/drwtrans.cxx
@@ -188,7 +188,7 @@
// #i71538# use complete SdrViews
// SdrExchangeView aView(pModel);
SdrView aView(pModel);
SdrView aView(*pModel);
SdrPageView* pPv = aView.ShowSdrPage(aView.GetModel()->GetPage(0));
aView.MarkAllObj(pPv);
aSrcSize = aView.GetAllMarkedRect().GetSize();
@@ -395,7 +395,7 @@
{
// #i71538# use complete SdrViews
// SdrExchangeView aView( pModel );
SdrView aView( pModel );
SdrView aView(*pModel);
SdrPageView* pPv = aView.ShowSdrPage(aView.GetModel()->GetPage(0));
OSL_ENSURE( pPv, "pPv not there..." );
aView.MarkAllObj( pPv );
@@ -632,7 +632,7 @@
void ScDrawTransferObj::SetDragSource( const ScDrawView* pView )
{
DELETEZ( pDragSourceView );
pDragSourceView = new SdrView( pView->GetModel() );
pDragSourceView = new SdrView(pView->getSdrModelFromSdrView()); // TTTT pView should be reference
lcl_InitMarks( *pDragSourceView, *pView, pView->GetTab() );
//! add as listener with document, delete pDragSourceView if document gone
@@ -641,7 +641,7 @@
void ScDrawTransferObj::SetDragSourceObj( SdrObject* pObj, SCTAB nTab )
{
DELETEZ( pDragSourceView );
pDragSourceView = new SdrView( pObj->GetModel() );
pDragSourceView = new SdrView(pObj->getSdrModelFromSdrObject()); // TTTT pObj should be reference
pDragSourceView->ShowSdrPage(pDragSourceView->GetModel()->GetPage(nTab));
SdrPageView* pPV = pDragSourceView->GetSdrPageView();
pDragSourceView->MarkObj(pObj, pPV);
@@ -719,7 +719,7 @@
SdrModel* pDestModel = rDestDoc.GetDrawLayer();
// #i71538# use complete SdrViews
// SdrExchangeView aDestView( pDestModel );
SdrView aDestView( pDestModel );
SdrView aDestView(*pDestModel);
aDestView.ShowSdrPage(aDestView.GetModel()->GetPage(0));
aDestView.Paste(
*pModel,
diff --git a/sc/source/ui/drawfunc/fuconarc.cxx b/sc/source/ui/drawfunc/fuconarc.cxx
index 7ada210..d167649 100644
--- a/sc/source/ui/drawfunc/fuconarc.cxx
+++ b/sc/source/ui/drawfunc/fuconarc.cxx
@@ -123,8 +123,9 @@
// case SID_DRAW_CIRCLECUT:
SdrObject* pObj = SdrObjFactory::MakeNewObject(
pView->GetCurrentObjInventor(), pView->GetCurrentObjIdentifier(),
nullptr, pDrDoc);
*pDrDoc,
pView->GetCurrentObjInventor(),
pView->GetCurrentObjIdentifier());
if(pObj)
{
diff --git a/sc/source/ui/drawfunc/fuconcustomshape.cxx b/sc/source/ui/drawfunc/fuconcustomshape.cxx
index f5a0339..e028a4d 100644
--- a/sc/source/ui/drawfunc/fuconcustomshape.cxx
+++ b/sc/source/ui/drawfunc/fuconcustomshape.cxx
@@ -132,8 +132,10 @@
SdrObject* FuConstCustomShape::CreateDefaultObject(const sal_uInt16 /* nID */, const tools::Rectangle& rRectangle)
{
SdrObject* pObj = SdrObjFactory::MakeNewObject(
pView->GetCurrentObjInventor(), pView->GetCurrentObjIdentifier(),
nullptr, pDrDoc);
*pDrDoc,
pView->GetCurrentObjInventor(),
pView->GetCurrentObjIdentifier());
if( pObj )
{
tools::Rectangle aRectangle( rRectangle );
@@ -142,6 +144,7 @@
ImpForceQuadratic( aRectangle );
pObj->SetLogicRect( aRectangle );
}
return pObj;
}
@@ -168,7 +171,7 @@
{
const SfxItemSet& rSource = pSourceObj->GetMergedItemSet();
SfxItemSet aDest(
pObj->GetModel()->GetItemPool(),
pObj->getSdrModelFromSdrObject().GetItemPool(),
svl::Items<
// Ranges from SdrAttrObj:
SDRATTR_START, SDRATTR_SHADOW_LAST,
diff --git a/sc/source/ui/drawfunc/fuconpol.cxx b/sc/source/ui/drawfunc/fuconpol.cxx
index 330ebf09..cc9ec05 100644
--- a/sc/source/ui/drawfunc/fuconpol.cxx
+++ b/sc/source/ui/drawfunc/fuconpol.cxx
@@ -185,8 +185,9 @@
// case SID_DRAW_FREELINE_NOFILL:
SdrObject* pObj = SdrObjFactory::MakeNewObject(
pView->GetCurrentObjInventor(), pView->GetCurrentObjIdentifier(),
nullptr, pDrDoc);
*pDrDoc,
pView->GetCurrentObjInventor(),
pView->GetCurrentObjIdentifier());
if(pObj)
{
diff --git a/sc/source/ui/drawfunc/fuconrec.cxx b/sc/source/ui/drawfunc/fuconrec.cxx
index d3ae4c9..6aba5fa 100644
--- a/sc/source/ui/drawfunc/fuconrec.cxx
+++ b/sc/source/ui/drawfunc/fuconrec.cxx
@@ -58,10 +58,10 @@
namespace {
::basegfx::B2DPolyPolygon getPolygon(const char* pResId, const SdrModel* pDoc)
::basegfx::B2DPolyPolygon getPolygon(const char* pResId, const SdrModel& rModel)
{
::basegfx::B2DPolyPolygon aRetval;
XLineEndListRef pLineEndList = pDoc->GetLineEndList();
XLineEndListRef pLineEndList(rModel.GetLineEndList());
if( pLineEndList.is() )
{
@@ -116,7 +116,7 @@
if (pObj)
{
SfxItemSet aAttr(pObj->GetModel()->GetItemPool());
SfxItemSet aAttr(pObj->getSdrModelFromSdrObject().GetItemPool());
SetLineEnds(aAttr, pObj, aSfxRequest.GetSlot());
pObj->SetMergedItemSet(aAttr);
}
@@ -216,7 +216,7 @@
void FuConstRectangle::SetLineEnds(SfxItemSet& rAttr, const SdrObject* pObj, sal_uInt16 nSlotId)
{
SdrModel *pDoc = pObj->GetModel();
SdrModel& rModel(pObj->getSdrModelFromSdrObject()); // TTTT pObj should be reference
if ( nSlotId == SID_LINE_ARROW_START ||
nSlotId == SID_LINE_ARROW_END ||
@@ -230,7 +230,7 @@
// set attributes of line start and ends
// arrowhead
::basegfx::B2DPolyPolygon aArrow( getPolygon( RID_SVXSTR_ARROW, pDoc ) );
::basegfx::B2DPolyPolygon aArrow( getPolygon( RID_SVXSTR_ARROW, rModel ) );
if( !aArrow.count() )
{
::basegfx::B2DPolygon aNewArrow;
@@ -242,7 +242,7 @@
}
// Circles
::basegfx::B2DPolyPolygon aCircle( getPolygon( RID_SVXSTR_CIRCLE, pDoc ) );
::basegfx::B2DPolyPolygon aCircle( getPolygon( RID_SVXSTR_CIRCLE, rModel ) );
if( !aCircle.count() )
{
::basegfx::B2DPolygon aNewCircle;
@@ -252,7 +252,7 @@
}
// Square
::basegfx::B2DPolyPolygon aSquare( getPolygon( RID_SVXSTR_SQUARE, pDoc ) );
::basegfx::B2DPolyPolygon aSquare( getPolygon( RID_SVXSTR_SQUARE, rModel ) );
if( !aSquare.count() )
{
::basegfx::B2DPolygon aNewSquare;
@@ -264,7 +264,7 @@
aSquare.append(aNewSquare);
}
SfxItemSet aSet( pDoc->GetItemPool() );
SfxItemSet aSet( rModel.GetItemPool() );
long nWidth = 200; // (1/100th mm)
// determine line width and calculate with it the line end width
@@ -356,8 +356,9 @@
SdrObject* FuConstRectangle::CreateDefaultObject(const sal_uInt16 nID, const tools::Rectangle& rRectangle)
{
SdrObject* pObj = SdrObjFactory::MakeNewObject(
pView->GetCurrentObjInventor(), pView->GetCurrentObjIdentifier(),
nullptr, pDrDoc);
*pDrDoc,
pView->GetCurrentObjInventor(),
pView->GetCurrentObjIdentifier());
if(pObj)
{
diff --git a/sc/source/ui/drawfunc/fuconuno.cxx b/sc/source/ui/drawfunc/fuconuno.cxx
index 619ad1c..a3a141a 100644
--- a/sc/source/ui/drawfunc/fuconuno.cxx
+++ b/sc/source/ui/drawfunc/fuconuno.cxx
@@ -111,8 +111,9 @@
// case SID_FM_CREATE_CONTROL:
SdrObject* pObj = SdrObjFactory::MakeNewObject(
pView->GetCurrentObjInventor(), pView->GetCurrentObjIdentifier(),
nullptr, pDrDoc);
*pDrDoc,
pView->GetCurrentObjInventor(),
pView->GetCurrentObjIdentifier());
if(pObj)
{
diff --git a/sc/source/ui/drawfunc/fuins1.cxx b/sc/source/ui/drawfunc/fuins1.cxx
index 5574a6f..d1efc9f 100644
--- a/sc/source/ui/drawfunc/fuins1.cxx
+++ b/sc/source/ui/drawfunc/fuins1.cxx
@@ -177,10 +177,13 @@
tools::Rectangle aRect ( aInsertPos, aLogicSize );
SdrGrafObj* pObj = new SdrGrafObj( rGraphic1, aRect );
SdrGrafObj* pObj = new SdrGrafObj(
pView->getSdrModelFromSdrView(), // TTTT pView should be reference
rGraphic1,
aRect);
// calling SetGraphicLink here doesn't work
// Yes, due to the SdrObject had no SdrModel
// Path is no longer used as name for the graphics object
ScDrawLayer* pLayer = static_cast<ScDrawLayer*>(pView->GetModel());
@@ -244,9 +247,10 @@
#endif
}
SdrMediaObj* pObj = new SdrMediaObj( tools::Rectangle( aInsertPos, aSize ) );
SdrMediaObj* pObj = new SdrMediaObj(
*rData.GetDocument()->GetDrawLayer(),
tools::Rectangle(aInsertPos, aSize));
pObj->SetModel(rData.GetDocument()->GetDrawLayer()); // set before setURL
pObj->setURL( realURL, ""/*TODO?*/ );
pView->InsertObjectAtView( pObj, *pPV, bApi ? SdrInsertFlags::DONTMARK : SdrInsertFlags::NONE );
}
diff --git a/sc/source/ui/drawfunc/fuins2.cxx b/sc/source/ui/drawfunc/fuins2.cxx
index b56a1c1..bcee011 100644
--- a/sc/source/ui/drawfunc/fuins2.cxx
+++ b/sc/source/ui/drawfunc/fuins2.cxx
@@ -350,7 +350,11 @@
if ( rData.GetDocument()->IsNegativePage( rData.GetTabNo() ) )
aPnt.AdjustX( -(aSize.Width()) ); // move position to left edge
tools::Rectangle aRect (aPnt, aSize);
SdrOle2Obj* pObj = new SdrOle2Obj( aObjRef, aName, aRect);
SdrOle2Obj* pObj = new SdrOle2Obj(
*pDoc, // TTTT should be reference
aObjRef,
aName,
aRect);
SdrPageView* pPV = pView->GetSdrPageView();
pView->InsertObjectAtView(pObj, *pPV);
@@ -588,7 +592,11 @@
Point aStart = pViewSh->GetChartInsertPos( aSize, aPositionRange );
tools::Rectangle aRect (aStart, aSize);
SdrOle2Obj* pObj = new SdrOle2Obj( svt::EmbeddedObjectRef( xObj, nAspect ), aName, aRect);
SdrOle2Obj* pObj = new SdrOle2Obj(
*pDoc, // TTTT should be reference
svt::EmbeddedObjectRef(xObj, nAspect),
aName,
aRect);
SdrPageView* pPV = pView->GetSdrPageView();
// #i121334# This call will change the chart's default background fill from white to transparent.
@@ -747,7 +755,11 @@
ScRange aPositionRange = pViewSh->GetViewData().GetCurPos();
Point aStart = pViewSh->GetChartInsertPos( aSize, aPositionRange );
tools::Rectangle aRect (aStart, aSize);
SdrOle2Obj* pObj = new SdrOle2Obj( svt::EmbeddedObjectRef( xObj, nAspect ), aName, aRect);
SdrOle2Obj* pObj = new SdrOle2Obj(
*pDoc, // TTTT should be reference
svt::EmbeddedObjectRef(xObj, nAspect),
aName,
aRect);
SdrPageView* pPV = pView->GetSdrPageView();
diff --git a/sc/source/ui/drawfunc/futext.cxx b/sc/source/ui/drawfunc/futext.cxx
index 3858359..7914c87 100644
--- a/sc/source/ui/drawfunc/futext.cxx
+++ b/sc/source/ui/drawfunc/futext.cxx
@@ -643,8 +643,9 @@
// case SID_DRAW_NOTEEDIT:
SdrObject* pObj = SdrObjFactory::MakeNewObject(
pView->GetCurrentObjInventor(), pView->GetCurrentObjIdentifier(),
nullptr, pDrDoc);
*pDrDoc,
pView->GetCurrentObjInventor(),
pView->GetCurrentObjIdentifier());
if(pObj)
{
diff --git a/sc/source/ui/inc/drawview.hxx b/sc/source/ui/inc/drawview.hxx
index 9574cdb..ad353cd 100644
--- a/sc/source/ui/inc/drawview.hxx
+++ b/sc/source/ui/inc/drawview.hxx
@@ -56,8 +56,11 @@
virtual SdrUndoManager* getSdrUndoManagerForEnhancedTextEdit() const override;
public:
ScDrawView( OutputDevice* pOut, ScViewData* pData );
virtual ~ScDrawView() override;
ScDrawView(
OutputDevice* pOut,
ScViewData* pData);
virtual ~ScDrawView() override;
virtual void MarkListHasChanged() override;
virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
diff --git a/sc/source/ui/navipi/content.cxx b/sc/source/ui/navipi/content.cxx
index 52c3fb9..a4141607 100644
--- a/sc/source/ui/navipi/content.cxx
+++ b/sc/source/ui/navipi/content.cxx
@@ -1248,7 +1248,7 @@
SdrObject* pObject = pModel->GetNamedObject( rName, nDrawId, nTab );
if (pObject)
{
SdrView aEditView( pModel );
SdrView aEditView(*pModel);
aEditView.ShowSdrPage(aEditView.GetModel()->GetPage(nTab));
SdrPageView* pPV = aEditView.GetSdrPageView();
aEditView.MarkObj(pObject, pPV);
diff --git a/sc/source/ui/unoobj/TablePivotCharts.cxx b/sc/source/ui/unoobj/TablePivotCharts.cxx
index a8c19f3..7f150e2 100644
--- a/sc/source/ui/unoobj/TablePivotCharts.cxx
+++ b/sc/source/ui/unoobj/TablePivotCharts.cxx
@@ -154,8 +154,11 @@
xReceiver->setArguments(aArgs);
}
SdrOle2Obj* pObject = new SdrOle2Obj(svt::EmbeddedObjectRef(xObject, embed::Aspects::MSOLE_CONTENT),
aName, aInsRect);
SdrOle2Obj* pObject = new SdrOle2Obj(
*pModel,
svt::EmbeddedObjectRef(xObject, embed::Aspects::MSOLE_CONTENT),
aName,
aInsRect);
if (xObject.is())
xObject->setVisualAreaSize(nAspect, aAwtSize);
diff --git a/sc/source/ui/unoobj/chartuno.cxx b/sc/source/ui/unoobj/chartuno.cxx
index c146e3a..1c98dc4 100644
--- a/sc/source/ui/unoobj/chartuno.cxx
+++ b/sc/source/ui/unoobj/chartuno.cxx
@@ -246,7 +246,11 @@
rDoc.GetChartListenerCollection()->insert( pChartListener );
pChartListener->StartListeningTo();
SdrOle2Obj* pObj = new SdrOle2Obj( ::svt::EmbeddedObjectRef( xObj, embed::Aspects::MSOLE_CONTENT ), aName, aInsRect );
SdrOle2Obj* pObj = new SdrOle2Obj(
*pModel,
::svt::EmbeddedObjectRef(xObj, embed::Aspects::MSOLE_CONTENT),
aName,
aInsRect);
// set VisArea
if( xObj.is())
diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx
index d16bc89..ee46cd1 100644
--- a/sc/source/ui/unoobj/docuno.cxx
+++ b/sc/source/ui/unoobj/docuno.cxx
@@ -373,6 +373,18 @@
pDocSh->SetBaseModel( new ScModelObj(pDocSh) );
}
SdrModel* ScModelObj::getSdrModelFromUnoModel() const
{
ScDocument& rDoc(pDocShell->GetDocument());
if(!rDoc.GetDrawLayer())
{
rDoc.InitDrawLayer();
}
return rDoc.GetDrawLayer();
}
ScModelObj::ScModelObj( ScDocShell* pDocSh ) :
SfxBaseModel( pDocSh ),
aPropSet( lcl_GetDocOptPropertyMap() ),
@@ -1947,7 +1959,9 @@
if( pModel )
{
aDrawViewKeeper.mpDrawView = new FmFormView( pModel, pDev );
aDrawViewKeeper.mpDrawView = new FmFormView(
*pModel,
pDev);
aDrawViewKeeper.mpDrawView->ShowSdrPage(aDrawViewKeeper.mpDrawView->GetModel()->GetPage(nTab));
aDrawViewKeeper.mpDrawView->SetPrintPreview();
}
diff --git a/sc/source/ui/unoobj/shapeuno.cxx b/sc/source/ui/unoobj/shapeuno.cxx
index a938851..8c590d6 100644
--- a/sc/source/ui/unoobj/shapeuno.cxx
+++ b/sc/source/ui/unoobj/shapeuno.cxx
@@ -333,11 +333,13 @@
SdrObject *pObj = GetSdrObject();
if (pObj)
{
ScDrawLayer* pModel = static_cast<ScDrawLayer*>(pObj->GetModel());
SdrPage* pPage = pObj->GetPage();
if ( pModel && pPage )
ScDrawLayer& rModel(static_cast< ScDrawLayer& >(pObj->getSdrModelFromSdrObject()));
SdrPage* pPage(pObj->GetPage());
if ( pPage )
{
ScDocument* pDoc = pModel->GetDocument();
ScDocument* pDoc(rModel.GetDocument());
if ( pDoc )
{
SfxObjectShell* pObjSh = pDoc->GetDocumentShell();
@@ -346,7 +348,7 @@
ScDocShell* pDocSh = static_cast<ScDocShell*>(pObjSh);
SCTAB nTab = 0;
if ( lcl_GetPageNum( pPage, *pModel, nTab ) )
if ( lcl_GetPageNum( pPage, rModel, nTab ) )
{
table::CellRangeAddress aAddress = xRangeAdd->getRangeAddress();
if (nTab == aAddress.Sheet)
@@ -463,14 +465,15 @@
SdrObject *pObj = GetSdrObject();
if (pObj)
{
ScDrawLayer* pModel = static_cast<ScDrawLayer*>(pObj->GetModel());
SdrPage* pPage = pObj->GetPage();
if ( pModel && pPage )
ScDrawLayer& rModel(static_cast< ScDrawLayer& >(pObj->getSdrModelFromSdrObject()));
SdrPage* pPage(pObj->GetPage());
if ( pPage )
{
SCTAB nTab = 0;
if ( lcl_GetPageNum( pPage, *pModel, nTab ) )
if ( lcl_GetPageNum( pPage, rModel, nTab ) )
{
ScDocument* pDoc = pModel->GetDocument();
ScDocument* pDoc = rModel.GetDocument();
if ( pDoc )
{
SfxObjectShell* pObjSh = pDoc->GetDocumentShell();
@@ -561,14 +564,15 @@
SdrObject *pObj = GetSdrObject();
if (pObj)
{
ScDrawLayer* pModel = static_cast<ScDrawLayer*>(pObj->GetModel());
SdrPage* pPage = pObj->GetPage();
if ( pModel && pPage )
ScDrawLayer& rModel(static_cast< ScDrawLayer& >(pObj->getSdrModelFromSdrObject()));
SdrPage* pPage(pObj->GetPage());
if ( pPage )
{
SCTAB nTab = 0;
if ( lcl_GetPageNum( pPage, *pModel, nTab ) )
if ( lcl_GetPageNum( pPage, rModel, nTab ) )
{
ScDocument* pDoc = pModel->GetDocument();
ScDocument* pDoc = rModel.GetDocument();
if ( pDoc )
{
SfxObjectShell* pObjSh = pDoc->GetDocumentShell();
@@ -657,15 +661,16 @@
SdrObject *pObj = GetSdrObject();
if (pObj)
{
ScDrawLayer* pModel = static_cast<ScDrawLayer*>(pObj->GetModel());
SdrPage* pPage = pObj->GetPage();
if ( pModel && pPage )
ScDrawLayer& rModel(static_cast< ScDrawLayer& >(pObj->getSdrModelFromSdrObject()));
SdrPage* pPage(pObj->GetPage());
if ( pPage )
{
ScDocument* pDoc = pModel->GetDocument();
ScDocument* pDoc = rModel.GetDocument();
if ( pDoc )
{
SCTAB nTab = 0;
if ( lcl_GetPageNum( pPage, *pModel, nTab ) )
if ( lcl_GetPageNum( pPage, rModel, nTab ) )
{
SfxObjectShell* pObjSh = pDoc->GetDocumentShell();
if ( pObjSh && dynamic_cast<const ScDocShell*>( pObjSh) != nullptr )
@@ -705,15 +710,16 @@
SdrObject *pObj = GetSdrObject();
if (pObj)
{
ScDrawLayer* pModel = static_cast<ScDrawLayer*>(pObj->GetModel());
SdrPage* pPage = pObj->GetPage();
if ( pModel && pPage )
ScDrawLayer& rModel(static_cast< ScDrawLayer& >(pObj->getSdrModelFromSdrObject()));
SdrPage* pPage(pObj->GetPage());
if ( pPage )
{
ScDocument* pDoc = pModel->GetDocument();
ScDocument* pDoc = rModel.GetDocument();
if ( pDoc )
{
SCTAB nTab = 0;
if ( lcl_GetPageNum( pPage, *pModel, nTab ) )
if ( lcl_GetPageNum( pPage, rModel, nTab ) )
{
uno::Reference<drawing::XShape> xShape( mxShapeAgg, uno::UNO_QUERY );
if (xShape.is())
@@ -764,15 +770,16 @@
SdrObject *pObj = GetSdrObject();
if (pObj)
{
ScDrawLayer* pModel = static_cast<ScDrawLayer*>(pObj->GetModel());
SdrPage* pPage = pObj->GetPage();
if ( pModel && pPage )
ScDrawLayer& rModel(static_cast< ScDrawLayer& >(pObj->getSdrModelFromSdrObject()));
SdrPage* pPage(pObj->GetPage());
if ( pPage )
{
ScDocument* pDoc = pModel->GetDocument();
ScDocument* pDoc = rModel.GetDocument();
if ( pDoc )
{
SCTAB nTab = 0;
if ( lcl_GetPageNum( pPage, *pModel, nTab ) )
if ( lcl_GetPageNum( pPage, rModel, nTab ) )
{
uno::Reference<drawing::XShape> xShape( mxShapeAgg, uno::UNO_QUERY );
if (xShape.is())
@@ -997,28 +1004,26 @@
SdrObject* pObj = GetSdrObject();
if( pObj )
{
ScDrawLayer* pModel = static_cast<ScDrawLayer*>(pObj->GetModel());
SdrPage* pPage = pObj->GetPage();
if ( pModel )
ScDrawLayer& rModel(static_cast< ScDrawLayer& >(pObj->getSdrModelFromSdrObject()));
SdrPage* pPage(pObj->GetPage());
ScDocument* pDoc = rModel.GetDocument();
if ( pPage && pDoc )
{
ScDocument* pDoc = pModel->GetDocument();
if ( pDoc )
SfxObjectShell* pObjSh = pDoc->GetDocumentShell();
if ( pObjSh && dynamic_cast<const ScDocShell*>( pObjSh) != nullptr )
{
SfxObjectShell* pObjSh = pDoc->GetDocumentShell();
if ( pObjSh && dynamic_cast<const ScDocShell*>( pObjSh) != nullptr )
ScDocShell* pDocSh = static_cast<ScDocShell*>(pObjSh);
SCTAB nTab = 0;
if ( lcl_GetPageNum( pPage, rModel, nTab ) )
{
ScDocShell* pDocSh = static_cast<ScDocShell*>(pObjSh);
Point aPos(pObj->GetCurrentBoundRect().TopLeft());
ScRange aRange(pDoc->GetRange( nTab, tools::Rectangle( aPos, aPos ) ));
SCTAB nTab = 0;
if ( lcl_GetPageNum( pPage, *pModel, nTab ) )
{
Point aPos(pObj->GetCurrentBoundRect().TopLeft());
ScRange aRange(pDoc->GetRange( nTab, tools::Rectangle( aPos, aPos ) ));
// anchor is always the cell
// anchor is always the cell
xRet.set(new ScCellObj( pDocSh, aRange.aStart ));
}
xRet.set(new ScCellObj( pDocSh, aRange.aStart ));
}
}
}
@@ -1242,25 +1247,23 @@
SdrObject* pObj = GetSdrObject();
if( pObj )
{
ScDrawLayer* pModel = static_cast<ScDrawLayer*>(pObj->GetModel());
SdrPage* pPage = pObj->GetPage();
if ( pModel )
{
ScDocument* pDoc = pModel->GetDocument();
if ( pDoc )
{
SfxObjectShell* pObjSh = pDoc->GetDocumentShell();
if ( pObjSh && dynamic_cast<const ScDocShell*>( pObjSh) != nullptr )
{
ScDocShell* pDocSh = static_cast<ScDocShell*>(pObjSh);
ScDrawLayer& rModel(static_cast< ScDrawLayer& >(pObj->getSdrModelFromSdrObject()));
SdrPage* pPage(pObj->GetPage());
ScDocument* pDoc = rModel.GetDocument();
SCTAB nTab = 0;
if ( lcl_GetPageNum( pPage, *pModel, nTab ) )
{
const ScDrawObjData* pCaptData = ScDrawLayer::GetNoteCaptionData( pObj, nTab );
if( pCaptData )
return static_cast< ::cppu::OWeakObject* >( new ScCellObj( pDocSh, pCaptData->maStart ) );
}
if ( pPage && pDoc )
{
SfxObjectShell* pObjSh = pDoc->GetDocumentShell();
if ( pObjSh && dynamic_cast<const ScDocShell*>( pObjSh) != nullptr )
{
ScDocShell* pDocSh = static_cast<ScDocShell*>(pObjSh);
SCTAB nTab = 0;
if ( lcl_GetPageNum( pPage, rModel, nTab ) )
{
const ScDrawObjData* pCaptData = ScDrawLayer::GetNoteCaptionData( pObj, nTab );
if( pCaptData )
return static_cast< ::cppu::OWeakObject* >( new ScCellObj( pDocSh, pCaptData->maStart ) );
}
}
}
diff --git a/sc/source/ui/view/drawvie3.cxx b/sc/source/ui/view/drawvie3.cxx
index 4be43b1..bbe58cd 100644
--- a/sc/source/ui/view/drawvie3.cxx
+++ b/sc/source/ui/view/drawvie3.cxx
@@ -34,8 +34,10 @@
#include <tabvwsh.hxx>
#include <docsh.hxx>
ScDrawView::ScDrawView( OutputDevice* pOut, ScViewData* pData ) :
FmFormView( pData->GetDocument()->GetDrawLayer(), pOut ),
ScDrawView::ScDrawView(
OutputDevice* pOut,
ScViewData* pData )
: FmFormView(*pData->GetDocument()->GetDrawLayer(), pOut),
pViewData( pData ),
pDev( pOut ),
pDoc( pData->GetDocument() ),
diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx
index de4ff2c..0561a41 100644
--- a/sc/source/ui/view/gridwin4.cxx
+++ b/sc/source/ui/view/gridwin4.cxx
@@ -1197,7 +1197,10 @@
ScDrawLayer* pModel = pDoc->GetDrawLayer();
if (pModel)
{
mpLOKDrawView.reset(new FmFormView(pModel, &rDevice));
mpLOKDrawView.reset(
new FmFormView(
*pModel,
&rDevice));
mpLOKDrawView->ShowSdrPage(mpLOKDrawView->GetModel()->GetPage(nTab));
aOutputData.SetDrawView(mpLOKDrawView.get());
aOutputData.SetSpellCheckContext(mpSpellCheckCxt.get());
diff --git a/sc/source/ui/view/preview.cxx b/sc/source/ui/view/preview.cxx
index ae4a3fc..11596ac 100644
--- a/sc/source/ui/view/preview.cxx
+++ b/sc/source/ui/view/preview.cxx
@@ -165,7 +165,9 @@
if ( !pDrawView ) // New Drawing?
{
pDrawView = new FmFormView( pModel, this );
pDrawView = new FmFormView(
*pModel,
this);
// The DrawView takes over the Design-Mode from the Model
// (Settings "In opening Draftmode"), therefore to restore here
diff --git a/sc/source/ui/view/printfun.cxx b/sc/source/ui/view/printfun.cxx
index cdafc45..58316cf 100644
--- a/sc/source/ui/view/printfun.cxx
+++ b/sc/source/ui/view/printfun.cxx
@@ -564,7 +564,10 @@
if( pModel )
{
pDrawView.reset(new FmFormView( pModel, pDev ));
pDrawView.reset(
new FmFormView(
*pModel,
pDev));
pDrawView->ShowSdrPage(pDrawView->GetModel()->GetPage(nTab));
pDrawView->SetPrintPreview();
aOutputData.SetDrawView( pDrawView.get() );
diff --git a/sc/source/ui/view/tabvwshg.cxx b/sc/source/ui/view/tabvwshg.cxx
index ba44266..d081c87 100644
--- a/sc/source/ui/view/tabvwshg.cxx
+++ b/sc/source/ui/view/tabvwshg.cxx
@@ -60,8 +60,11 @@
ScDrawView* pDrView = pView->GetScDrawView();
SdrModel* pModel = pDrView->GetModel();
SdrObject* pObj = SdrObjFactory::MakeNewObject(SdrInventor::FmForm, OBJ_FM_BUTTON,
pDrView->GetSdrPageView()->GetPage(), pModel);
SdrObject* pObj = SdrObjFactory::MakeNewObject(
*pModel,
SdrInventor::FmForm,
OBJ_FM_BUTTON,
pDrView->GetSdrPageView()->GetPage());
SdrUnoObj* pUnoCtrl = dynamic_cast<SdrUnoObj*>( pObj );
OSL_ENSURE( pUnoCtrl, "no SdrUnoObj");
if( !pUnoCtrl )
diff --git a/sc/source/ui/view/viewfun7.cxx b/sc/source/ui/view/viewfun7.cxx
index e1f521c..cfbd4be 100644
--- a/sc/source/ui/view/viewfun7.cxx
+++ b/sc/source/ui/view/viewfun7.cxx
@@ -153,11 +153,12 @@
const SdrMark* pM=aMark.GetMark(nm);
const SdrObject* pObj=pM->GetMarkedSdrObj();
SdrObject* pNewObj=pObj->Clone();
// Directly Clone to taget SdrModel
SdrObject* pNewObj(pObj->Clone(pDrawModel));
if (pNewObj!=nullptr)
{
pNewObj->SetModel(pDrawModel);
// pNewObj->SetModel(pDrawModel);
pNewObj->SetPage(pDestPage);
// copy graphics within the same model - always needs new name
@@ -193,8 +194,9 @@
else
{
bPasteIsMove = false; // no internal move happened
SdrView aView(pModel); // #i71529# never create a base class of SdrView directly!
// TTTT hide all non-direct SdrView constr to disable construct
// in-between classes in one of the next steps (!)
SdrView aView(*pModel); // #i71529# never create a base class of SdrView directly!
SdrPageView* pPv = aView.ShowSdrPage(aView.GetModel()->GetPage(0));
aView.MarkAllObj(pPv);
Size aSize = aView.GetAllMarkedRect().GetSize();
@@ -353,7 +355,11 @@
tools::Rectangle aRect( aInsPos, aSize );
ScDrawView* pDrView = GetScDrawView();
SdrOle2Obj* pSdrObj = new SdrOle2Obj( aObjRef, aName, aRect );
SdrOle2Obj* pSdrObj = new SdrOle2Obj(
pDrView->getSdrModelFromSdrView(),
aObjRef,
aName,
aRect);
SdrPageView* pPV = pDrView->GetSdrPageView();
pDrView->InsertObjectSafe( pSdrObj, *pPV ); // don't mark if OLE
@@ -432,7 +438,10 @@
GetViewData().GetViewShell()->SetDrawShell( true );
tools::Rectangle aRect(aPos, aSize);
SdrGrafObj* pGrafObj = new SdrGrafObj(rGraphic, aRect);
SdrGrafObj* pGrafObj = new SdrGrafObj(
pScDrawView->getSdrModelFromSdrView(),
rGraphic,
aRect);
// path was the name of the graphic in history
diff --git a/sd/inc/CustomAnimationEffect.hxx b/sd/inc/CustomAnimationEffect.hxx
index 6322d36..53e08b7 100644
--- a/sd/inc/CustomAnimationEffect.hxx
+++ b/sd/inc/CustomAnimationEffect.hxx
@@ -25,17 +25,15 @@
#include <com/sun/star/animations/XAudio.hpp>
#include <com/sun/star/drawing/XShape.hpp>
#include <com/sun/star/util/XChangesListener.hpp>
#include <vcl/timer.hxx>
#include "sddllapi.h"
#include <list>
#include <vector>
#include <map>
#include <memory>
class SdrPathObj;
class SdrModel;
namespace sd {
@@ -167,7 +165,7 @@
SAL_DLLPRIVATE static sal_Int32 get_node_type( const css::uno::Reference< css::animations::XAnimationNode >& xNode );
SAL_DLLPRIVATE static sal_Int32 getNumberOfSubitems( const css::uno::Any& aTarget, sal_Int16 nIterateType );
SAL_DLLPRIVATE SdrPathObj* createSdrPathObjFromPath();
SAL_DLLPRIVATE SdrPathObj* createSdrPathObjFromPath(SdrModel& rTargetModel);
SAL_DLLPRIVATE void updateSdrPathObjFromPath( SdrPathObj& rPathObj );
SAL_DLLPRIVATE void updatePathFromSdrPathObj( const SdrPathObj& rPathObj );
diff --git a/sd/inc/sdpage.hxx b/sd/inc/sdpage.hxx
index 42af131..5dedec0 100644
--- a/sd/inc/sdpage.hxx
+++ b/sd/inc/sdpage.hxx
@@ -93,6 +93,7 @@
class SD_DLLPUBLIC SdPage final : public FmFormPage, public SdrObjUserCall
{
SdPage& operator=(const SdPage&) = delete;
SdPage(const SdPage&) = delete;
friend class SdGenericDrawPage;
friend class SdDrawPage;
@@ -147,15 +148,14 @@
sal_Int32 mnTransitionFadeColor;
double mfTransitionDuration;
SdPage(const SdPage& rSrcPage);
void lateInit(const SdPage& rSrcPage);
public:
SdPage(SdDrawDocument& rNewDoc, bool bMasterPage);
virtual ~SdPage() override;
virtual SdrPage* Clone() const override;
virtual SdrPage* Clone(SdrModel* pNewModel) const override;
virtual SdrPage* Clone(SdrModel* pNewModel = nullptr) const override;
virtual void SetSize(const Size& aSize) override;
virtual void SetBorder(sal_Int32 nLft, sal_Int32 nUpp, sal_Int32 nRgt, sal_Int32 Lwr) override;
@@ -163,7 +163,6 @@
virtual void SetRightBorder(sal_Int32 nBorder) override;
virtual void SetUpperBorder(sal_Int32 nBorder) override;
virtual void SetLowerBorder(sal_Int32 nBorder) override;
virtual void SetModel(SdrModel* pNewModel) override;
virtual bool IsReadOnly() const override;
sd::ShapeList& GetPresentationShapeList() { return maPresentationShapeList; }
@@ -388,6 +387,8 @@
sal_uInt16 mnPageId;
/** clone the animations from this and set them to rTargetPage
* TTTT: Order is strange, should be the other way around by
* convention/convenience and makes usage a little dangerous...
*/
void cloneAnimations( SdPage& rTargetPage ) const;
diff --git a/sd/source/core/CustomAnimationEffect.cxx b/sd/source/core/CustomAnimationEffect.cxx
index 2d1025d..1473358 100644
--- a/sd/source/core/CustomAnimationEffect.cxx
+++ b/sd/source/core/CustomAnimationEffect.cxx
@@ -1528,9 +1528,9 @@
return mnCommand == EffectCommands::STOPAUDIO;
}
SdrPathObj* CustomAnimationEffect::createSdrPathObjFromPath()
SdrPathObj* CustomAnimationEffect::createSdrPathObjFromPath(SdrModel& rTargetModel)
{
SdrPathObj * pPathObj = new SdrPathObj( OBJ_PATHLINE );
SdrPathObj * pPathObj = new SdrPathObj(rTargetModel, OBJ_PATHLINE);
updateSdrPathObjFromPath( *pPathObj );
return pPathObj;
}
diff --git a/sd/source/core/annotations/Annotation.cxx b/sd/source/core/annotations/Annotation.cxx
index ce442b4..38c6db7 100644
--- a/sd/source/core/annotations/Annotation.cxx
+++ b/sd/source/core/annotations/Annotation.cxx
@@ -69,7 +69,7 @@
static sal_uInt32 m_nLastId;
SdPage* GetPage() const { return mpPage; }
SdrModel* GetModel() { return (mpPage != nullptr) ? mpPage->GetModel() : nullptr; }
SdrModel* GetModel() { return (mpPage != nullptr) ? &mpPage->getSdrModelFromSdrPage() : nullptr; }
sal_uInt32 GetId() const { return m_nId; }
// XInterface:
@@ -366,7 +366,7 @@
osl::MutexGuard g(m_aMutex);
if( !m_TextRange.is() && (mpPage != nullptr) )
{
m_TextRange = TextApiObject::create( static_cast< SdDrawDocument* >( mpPage->GetModel() ) );
m_TextRange = TextApiObject::create( static_cast< SdDrawDocument* >( &mpPage->getSdrModelFromSdrPage() ) );
}
return Reference< XText >( m_TextRange.get() );
}
diff --git a/sd/source/core/drawdoc.cxx b/sd/source/core/drawdoc.cxx
index d6335e3..500a88c 100644
--- a/sd/source/core/drawdoc.cxx
+++ b/sd/source/core/drawdoc.cxx
@@ -657,22 +657,7 @@
}
mbNewOrLoadCompleted = true;
// Update all linked pages
sal_uInt16 nMaxSdPages = GetSdPageCount(PageKind::Standard);
for (sal_uInt16 nSdPage=0; nSdPage < nMaxSdPages; nSdPage++)
{
SdPage* pPage = GetSdPage(nSdPage, PageKind::Standard);
if (pPage && !pPage->GetFileName().isEmpty() && pPage->GetBookmarkName().getLength())
{
pPage->SetModel(this);
}
}
UpdateAllLinks();
SetChanged( false );
}
diff --git a/sd/source/core/drawdoc3.cxx b/sd/source/core/drawdoc3.cxx
index 9bc68bc..00a6056 100644
--- a/sd/source/core/drawdoc3.cxx
+++ b/sd/source/core/drawdoc3.cxx
@@ -608,7 +608,6 @@
// Assemble all link names
pPage->SetFileName(aBookmarkName);
pPage->SetBookmarkName(aName);
pPage->SetModel(this);
}
nActualInsertPos += 2;
@@ -705,7 +704,6 @@
SdPage* pPage = static_cast<SdPage*>( GetPage(nActualInsertPos) );
pPage->SetFileName(aBookmarkName);
pPage->SetBookmarkName(aPgName);
pPage->SetModel(this);
}
if (bReplace)
diff --git a/sd/source/core/pglink.cxx b/sd/source/core/pglink.cxx
index 93180e1..6762dcd 100644
--- a/sd/source/core/pglink.cxx
+++ b/sd/source/core/pglink.cxx
@@ -57,7 +57,7 @@
::sfx2::SvBaseLink::UpdateResult SdPageLink::DataChanged(
const OUString&, const css::uno::Any& )
{
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>( pPage->GetModel() );
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>( &pPage->getSdrModelFromSdrPage() );
sfx2::LinkManager* pLinkManager = pDoc!=nullptr ? pDoc->GetLinkManager() : nullptr;
if (pLinkManager)
diff --git a/sd/source/core/sdpage.cxx b/sd/source/core/sdpage.cxx
index ad906e2..eed4fa2 100644
--- a/sd/source/core/sdpage.cxx
+++ b/sd/source/core/sdpage.cxx
@@ -129,6 +129,9 @@
// presentation template of the outline objects. Therefore, it already
// contains the designator for the outline (STR_LAYOUT_OUTLINE).
maLayoutName = SdResId(STR_LAYOUT_DEFAULT_NAME)+ SD_LT_SEPARATOR STR_LAYOUT_OUTLINE;
// Stuff that former SetModel did also:
ConnectLink();
}
namespace
@@ -267,7 +270,7 @@
*/
SdrObject* SdPage::CreatePresObj(PresObjKind eObjKind, bool bVertical, const ::tools::Rectangle& rRect )
{
::svl::IUndoManager* pUndoManager = pModel ? static_cast<SdDrawDocument*>(pModel)->GetUndoManager() : nullptr;
::svl::IUndoManager* pUndoManager(static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetUndoManager());
const bool bUndo = pUndoManager && pUndoManager->IsInListAction() && IsInserted();
SdrObject* pSdrObj = nullptr;
@@ -279,7 +282,7 @@
{
case PRESOBJ_TITLE:
{
pSdrObj = new SdrRectObj(OBJ_TITLETEXT);
pSdrObj = new SdrRectObj(getSdrModelFromSdrPage(), OBJ_TITLETEXT);
if (mbMaster)
{
@@ -290,7 +293,7 @@
case PRESOBJ_OUTLINE:
{
pSdrObj = new SdrRectObj(OBJ_OUTLINETEXT);
pSdrObj = new SdrRectObj(getSdrModelFromSdrPage(), OBJ_OUTLINETEXT);
if (mbMaster)
{
@@ -301,7 +304,7 @@
case PRESOBJ_NOTES:
{
pSdrObj = new SdrRectObj(OBJ_TEXT);
pSdrObj = new SdrRectObj(getSdrModelFromSdrPage(), OBJ_TEXT);
if (mbMaster)
{
@@ -312,7 +315,7 @@
case PRESOBJ_TEXT:
{
pSdrObj = new SdrRectObj(OBJ_TEXT);
pSdrObj = new SdrRectObj(getSdrModelFromSdrPage(), OBJ_TEXT);
}
break;
@@ -330,7 +333,7 @@
Size aSize = aOutDev.PixelToLogic(aSizePix);
Point aPnt (0, 0);
::tools::Rectangle aRect (aPnt, aSize);
pSdrObj = new SdrGrafObj(aGraphic, aRect);
pSdrObj = new SdrGrafObj(getSdrModelFromSdrPage(), aGraphic, aRect);
aOutDev.Pop();
}
break;
@@ -338,7 +341,7 @@
case PRESOBJ_MEDIA:
case PRESOBJ_OBJECT:
{
pSdrObj = new SdrOle2Obj();
pSdrObj = new SdrOle2Obj(getSdrModelFromSdrPage());
BitmapEx aBmpEx(BMP_PRESOBJ_OBJECT);
Graphic aGraphic( aBmpEx );
static_cast<SdrOle2Obj*>(pSdrObj)->SetGraphic(aGraphic);
@@ -347,7 +350,7 @@
case PRESOBJ_CHART:
{
pSdrObj = new SdrOle2Obj();
pSdrObj = new SdrOle2Obj(getSdrModelFromSdrPage());
static_cast<SdrOle2Obj*>(pSdrObj)->SetProgName( "StarChart" );
BitmapEx aBmpEx(BMP_PRESOBJ_CHART);
Graphic aGraphic( aBmpEx );
@@ -357,7 +360,7 @@
case PRESOBJ_ORGCHART:
{
pSdrObj = new SdrOle2Obj();
pSdrObj = new SdrOle2Obj(getSdrModelFromSdrPage());
static_cast<SdrOle2Obj*>(pSdrObj)->SetProgName( "StarOrg" );
BitmapEx aBmpEx(BMP_PRESOBJ_ORGCHART);
Graphic aGraphic( aBmpEx );
@@ -368,7 +371,7 @@
case PRESOBJ_TABLE:
case PRESOBJ_CALC:
{
pSdrObj = new SdrOle2Obj();
pSdrObj = new SdrOle2Obj(getSdrModelFromSdrPage());
static_cast<SdrOle2Obj*>(pSdrObj)->SetProgName( "StarCalc" );
BitmapEx aBmpEx(BMP_PRESOBJ_TABLE);
Graphic aGraphic( aBmpEx );
@@ -381,7 +384,7 @@
// Save the first standard page at SdrPageObj
// #i105146# We want no content to be displayed for PageKind::Handout,
// so just never set a page as content
pSdrObj = new SdrPageObj(nullptr);
pSdrObj = new SdrPageObj(getSdrModelFromSdrPage(), nullptr);
}
break;
@@ -396,13 +399,13 @@
nDestPageNum -= 1;
}
if (pModel && nDestPageNum < pModel->GetPageCount())
if (nDestPageNum < getSdrModelFromSdrPage().GetPageCount())
{
pSdrObj = new SdrPageObj(pModel->GetPage(nDestPageNum));
pSdrObj = new SdrPageObj(getSdrModelFromSdrPage(), getSdrModelFromSdrPage().GetPage(nDestPageNum));
}
else
{
pSdrObj = new SdrPageObj();
pSdrObj = new SdrPageObj(getSdrModelFromSdrPage());
}
pSdrObj->SetResizeProtect(true);
@@ -414,7 +417,7 @@
case PRESOBJ_DATETIME:
case PRESOBJ_SLIDENUMBER:
{
pSdrObj = new SdrRectObj(OBJ_TEXT);
pSdrObj = new SdrRectObj(getSdrModelFromSdrPage(), OBJ_TEXT);
bEmptyPresObj = false;
bForceText = true;
}
@@ -437,7 +440,7 @@
if(bVertical)
static_cast<SdrTextObj*>(pSdrObj)->SetVerticalWriting(true);
SfxItemSet aTempAttr( static_cast<SdDrawDocument*>(pModel)->GetPool() );
SfxItemSet aTempAttr(static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetPool());
if( bVertical )
aTempAttr.Put( makeSdrTextMinFrameWidthItem( rRect.GetSize().Width() ) );
else
@@ -479,7 +482,7 @@
OUString aString = GetPresObjText(eObjKind);
if( (!aString.isEmpty() || bForceText) && dynamic_cast< const SdrTextObj *>( pSdrObj ) != nullptr )
{
SdrOutliner* pOutliner = static_cast<SdDrawDocument*>( GetModel() )->GetInternalOutliner();
SdrOutliner* pOutliner = static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetInternalOutliner();
OutlinerMode nOutlMode = pOutliner->GetMode();
pOutliner->Init( OutlinerMode::TextObject );
@@ -494,7 +497,7 @@
if( (eObjKind == PRESOBJ_HEADER) || (eObjKind == PRESOBJ_FOOTER) || (eObjKind == PRESOBJ_SLIDENUMBER) || (eObjKind == PRESOBJ_DATETIME) )
{
SfxItemSet aTempAttr( static_cast<SdDrawDocument*>(pModel)->GetPool() );
SfxItemSet aTempAttr(static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetPool());
aTempAttr.Put( SvxFontHeightItem( 493, 100, EE_CHAR_FONTHEIGHT ) );
aTempAttr.Put( SvxFontHeightItem( 493, 100, EE_CHAR_FONTHEIGHT_CTL ) );
aTempAttr.Put( SvxFontHeightItem( 493, 100, EE_CHAR_FONTHEIGHT_CJK ) );
@@ -522,7 +525,7 @@
if (mbMaster)
{
SdrLayerAdmin& rLayerAdmin = pModel->GetLayerAdmin();
SdrLayerAdmin& rLayerAdmin(getSdrModelFromSdrPage().GetLayerAdmin());
// background objects of the master page
pSdrObj->SetLayer( rLayerAdmin.
@@ -543,7 +546,7 @@
for (sal_uInt16 nLevel = 1; nLevel < 10; nLevel++)
{
OUString aName( maLayoutName + " " + OUString::number( nLevel ) );
SfxStyleSheet* pSheet = static_cast<SfxStyleSheet*>(pModel->GetStyleSheetPool()->Find(aName, SfxStyleFamily::Page));
SfxStyleSheet* pSheet = static_cast<SfxStyleSheet*>(getSdrModelFromSdrPage().GetStyleSheetPool()->Find(aName, SfxStyleFamily::Page));
DBG_ASSERT(pSheet, "StyleSheet for outline object not found");
if (pSheet)
pSdrObj->StartListening(*pSheet);
@@ -556,7 +559,7 @@
eObjKind == PRESOBJ_CALC ||
eObjKind == PRESOBJ_GRAPHIC )
{
SfxItemSet aSet( static_cast<SdDrawDocument*>(pModel)->GetPool() );
SfxItemSet aSet( static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetPool() );
aSet.Put( makeSdrTextContourFrameItem( true ) );
aSet.Put( SvxAdjustItem( SvxAdjust::Center, EE_PARA_JUST ) );
@@ -565,7 +568,7 @@
if( bUndo )
{
pUndoManager->AddUndoAction(pModel->GetSdrUndoFactory().CreateUndoNewObject(*pSdrObj));
pUndoManager->AddUndoAction(getSdrModelFromSdrPage().GetSdrUndoFactory().CreateUndoNewObject(*pSdrObj));
}
if( bUndo )
@@ -604,7 +607,7 @@
aName += STR_LAYOUT_BACKGROUND;
SfxStyleSheetBasePool* pStShPool = pModel->GetStyleSheetPool();
SfxStyleSheetBasePool* pStShPool = getSdrModelFromSdrPage().GetStyleSheetPool();
SfxStyleSheetBase* pResult = pStShPool->Find(aName, SfxStyleFamily::Page);
return static_cast<SfxStyleSheet*>(pResult);
}
@@ -651,7 +654,7 @@
break;
}
SfxStyleSheetBasePool* pStShPool = pModel->GetStyleSheetPool();
SfxStyleSheetBasePool* pStShPool = getSdrModelFromSdrPage().GetStyleSheetPool();
SfxStyleSheetBase* pResult = pStShPool->Find(aName, SfxStyleFamily::Page);
return static_cast<SfxStyleSheet*>(pResult);
}
@@ -696,7 +699,7 @@
aStyleName += OUString::number( sal_Int32( nHelpId - HID_PSEUDOSHEET_OUTLINE ));
}
SfxStyleSheetBasePool* pStShPool = pModel->GetStyleSheetPool();
SfxStyleSheetBasePool* pStShPool = getSdrModelFromSdrPage().GetStyleSheetPool();
SfxStyleSheetBase* pResult = pStShPool->Find(aStyleName, SfxStyleFamily::Page);
return dynamic_cast<SdStyleSheet*>(pResult);
}
@@ -718,7 +721,7 @@
case SdrUserCallType::MoveOnly:
case SdrUserCallType::Resize:
{
if (!pModel || pModel->isLocked())
if ( getSdrModelFromSdrPage().isLocked())
break;
SdrObject* pObj = const_cast<SdrObject*>(&rObj);
@@ -729,7 +732,7 @@
{
if( pObj->GetUserCall() )
{
::svl::IUndoManager* pUndoManager = static_cast<SdDrawDocument*>(pModel)->GetUndoManager();
::svl::IUndoManager* pUndoManager = static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetUndoManager();
const bool bUndo = pUndoManager && pUndoManager->IsInListAction() && IsInserted();
if( bUndo )
@@ -743,11 +746,11 @@
{
// Object of the master page changed, therefore adjust
// object on all pages
sal_uInt16 nPageCount = static_cast<SdDrawDocument*>(pModel)->GetSdPageCount(mePageKind);
sal_uInt16 nPageCount = static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetSdPageCount(mePageKind);
for (sal_uInt16 i = 0; i < nPageCount; i++)
{
SdPage* pLoopPage = static_cast<SdDrawDocument*>(pModel)->GetSdPage(i, mePageKind);
SdPage* pLoopPage = static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetSdPage(i, mePageKind);
if (pLoopPage && this == &(pLoopPage->TRG_GetMasterPage()))
{
@@ -777,7 +780,7 @@
void SdPage::CreateTitleAndLayout(bool bInit, bool bCreate )
{
::svl::IUndoManager* pUndoManager = pModel ? static_cast<SdDrawDocument*>(pModel)->GetUndoManager() : nullptr;
::svl::IUndoManager* pUndoManager(static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetUndoManager());
const bool bUndo = pUndoManager && pUndoManager->IsInListAction() && IsInserted();
SdPage* pMasterPage = this;
@@ -800,7 +803,7 @@
pMasterPage->EnsureMasterPageDefaultBackground();
}
if (GetModel() && static_cast<SdDrawDocument*>(GetModel())->GetDocumentType() == DocumentType::Impress)
if (static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetDocumentType() == DocumentType::Impress)
{
if( mePageKind == PageKind::Handout && bInit )
{
@@ -814,7 +817,7 @@
if( bUndo )
{
pUndoManager->AddUndoAction(pModel->GetSdrUndoFactory().CreateUndoDeleteObject(*pObj));
pUndoManager->AddUndoAction(getSdrModelFromSdrPage().GetSdrUndoFactory().CreateUndoDeleteObject(*pObj));
}
else
{
@@ -823,7 +826,7 @@
}
std::vector< ::tools::Rectangle > aAreas;
CalculateHandoutAreas( *static_cast< SdDrawDocument* >(GetModel() ), pMasterPage->GetAutoLayout(), false, aAreas );
CalculateHandoutAreas( static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()), pMasterPage->GetAutoLayout(), false, aAreas );
const bool bSkip = pMasterPage->GetAutoLayout() == AUTOLAYOUT_HANDOUT3;
std::vector< ::tools::Rectangle >::iterator iter( aAreas.begin() );
@@ -897,7 +900,7 @@
{
bool bNoObjectFound = true; //used to break from outer loop
const std::vector< Reference<XNode> >& objectInfo = static_cast<const SdDrawDocument*>(rPage.GetModel())->GetObjectVector();
const std::vector< Reference<XNode> >& objectInfo = static_cast< const SdDrawDocument& >(rPage.getSdrModelFromSdrPage()).GetObjectVector();
for( std::vector< Reference<XNode> >::const_iterator aIter=objectInfo.begin(); aIter != objectInfo.end(); ++aIter )
{
if(bNoObjectFound)
@@ -1047,8 +1050,7 @@
if( pObject )
{
SdDrawDocument *pDoc = static_cast<SdDrawDocument*>(pModel);
SdDrawDocument* pDoc(static_cast< SdDrawDocument* >(&getSdrModelFromSdrPage()));
const bool bUndo = pDoc->IsUndoEnabled();
if( bUndo )
pDoc->AddUndo(pDoc->GetSdrUndoFactory().CreateUndoDeleteObject(*pObject));
@@ -1113,9 +1115,9 @@
nDestPageNum -= 1;
}
if(nDestPageNum < pModel->GetPageCount())
if(nDestPageNum < getSdrModelFromSdrPage().GetPageCount())
{
pRefPage = pModel->GetPage(nDestPageNum);
pRefPage = getSdrModelFromSdrPage().GetPage(nDestPageNum);
}
if ( pRefPage )
@@ -1362,7 +1364,7 @@
const Point aLayoutPos( aLayoutRect.TopLeft() );
double propvalue[] = {0,0,0,0};
const std::vector< Reference<XNode> >& layoutInfo = static_cast<const SdDrawDocument*>(rPage.GetModel())->GetLayoutVector();
const std::vector< Reference<XNode> >& layoutInfo = static_cast< const SdDrawDocument& >(rPage.getSdrModelFromSdrPage()).GetLayoutVector();
for( std::vector< Reference<XNode> >::const_iterator aIter=layoutInfo.begin(); aIter != layoutInfo.end(); ++aIter )
{
Reference<XNode> layoutNode = *aIter;
@@ -1521,10 +1523,10 @@
{
if( pOle2->IsEmpty() )
bFound = true;
else if( rPage.GetModel() )
else
{
SdrModel* pSdrModel = rPage.GetModel();
::comphelper::IEmbeddedHelper *pPersist = pSdrModel->GetPersist();
::comphelper::IEmbeddedHelper* pPersist(rPage.getSdrModelFromSdrPage().GetPersist());
if( pPersist )
{
uno::Reference < embed::XEmbeddedObject > xObject = pPersist->getEmbeddedObjectContainer().
@@ -1598,7 +1600,7 @@
const bool bSwitchLayout = eLayout != GetAutoLayout();
::svl::IUndoManager* pUndoManager = pModel ? static_cast<SdDrawDocument*>(pModel)->GetUndoManager() : nullptr;
::svl::IUndoManager* pUndoManager(static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetUndoManager());
const bool bUndo = pUndoManager && pUndoManager->IsInListAction() && IsInserted();
meAutoLayout = eLayout;
@@ -1647,7 +1649,7 @@
if( pObj->IsEmptyPresObj() )
{
if( bUndo )
pUndoManager->AddUndoAction(pModel->GetSdrUndoFactory().CreateUndoDeleteObject(*pObj));
pUndoManager->AddUndoAction(getSdrModelFromSdrPage().GetSdrUndoFactory().CreateUndoDeleteObject(*pObj));
RemoveObject( pObj->GetOrdNum() );
@@ -1670,7 +1672,7 @@
{
FmFormPage::NbcInsertObject(pObj, nPos);
static_cast<SdDrawDocument*>(pModel)->InsertObject(pObj);
static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).InsertObject(pObj);
SdrLayerID nId = pObj->GetLayer();
if( mbMaster )
@@ -1733,8 +1735,7 @@
{
RemovePresObj(pObject);
if( pModel )
static_cast<SdDrawDocument*>(pModel)->RemoveObject(pObject);
static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).RemoveObject(pObject);
removeAnimations( pObject );
}
@@ -1956,7 +1957,7 @@
for (sal_Int32 i=1; i<=9; i++)
{
OUString sLayoutName( aName + OUString::number( i ) );
SfxStyleSheet* pOutlineSheet = static_cast<SfxStyleSheet*>(static_cast<SdDrawDocument*>(pModel)->GetStyleSheetPool()->Find(sLayoutName, SfxStyleFamily::Page));
SfxStyleSheet* pOutlineSheet = static_cast<SfxStyleSheet*>(static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetStyleSheetPool()->Find(sLayoutName, SfxStyleFamily::Page));
if (pOutlineSheet)
{
@@ -2077,12 +2078,11 @@
SdrObject* convertPresentationObjectImpl(SdPage& rPage, SdrObject* pSourceObj, PresObjKind& eObjKind, bool bVertical, const ::tools::Rectangle& rRect)
{
SdDrawDocument* pModel = static_cast< SdDrawDocument* >( rPage.GetModel() );
DBG_ASSERT( pModel, "sd::convertPresentationObjectImpl(), no model on page!" );
if( !pModel || !pSourceObj )
SdDrawDocument& rModel(static_cast< SdDrawDocument& >(rPage.getSdrModelFromSdrPage()));
if( !pSourceObj )
return pSourceObj;
::svl::IUndoManager* pUndoManager = pModel->GetUndoManager();
::svl::IUndoManager* pUndoManager = rModel.GetUndoManager();
const bool bUndo = pUndoManager && pUndoManager->IsInListAction() && rPage.IsInserted();
SdrObject* pNewObj = pSourceObj;
@@ -2096,7 +2096,7 @@
if(pOutlParaObj)
{
// assign text
SdOutliner* pOutl = pModel->GetInternalOutliner();
SdOutliner* pOutl = rModel.GetInternalOutliner();
pOutl->Clear();
pOutl->SetText( *pOutlParaObj );
pOutlParaObj = pOutl->CreateParaObject();
@@ -2108,7 +2108,7 @@
{
// assign new template
OUString aName( rPage.GetLayoutName() + " " + OUString::number( nLevel ) );
SfxStyleSheet* pSheet = static_cast<SfxStyleSheet*>( pModel->GetStyleSheetPool()->Find(aName, SfxStyleFamily::Page) );
SfxStyleSheet* pSheet = static_cast<SfxStyleSheet*>( rModel.GetStyleSheetPool()->Find(aName, SfxStyleFamily::Page) );
if (pSheet)
{
@@ -2125,7 +2125,7 @@
}
// Remove LRSpace item
SfxItemSet aSet(pModel->GetPool(), svl::Items<EE_PARA_LRSPACE, EE_PARA_LRSPACE>{} );
SfxItemSet aSet(rModel.GetPool(), svl::Items<EE_PARA_LRSPACE, EE_PARA_LRSPACE>{} );
aSet.Put(pNewObj->GetMergedItemSet());
@@ -2134,7 +2134,7 @@
pNewObj->SetMergedItemSet(aSet);
if( bUndo )
pUndoManager->AddUndoAction( pModel->GetSdrUndoFactory().CreateUndoDeleteObject(*pSourceObj) );
pUndoManager->AddUndoAction( rModel.GetSdrUndoFactory().CreateUndoDeleteObject(*pSourceObj) );
// Remove outline shape from page
rPage.RemoveObject( pSourceObj->GetOrdNum() );
@@ -2154,7 +2154,7 @@
if(pOutlParaObj)
{
// assign text
SdOutliner* pOutl = pModel->GetInternalOutliner();
SdOutliner* pOutl = rModel.GetInternalOutliner();
pOutl->Clear();
pOutl->SetText( *pOutlParaObj );
pOutlParaObj = pOutl->CreateParaObject();
@@ -2163,7 +2163,7 @@
pNewObj->SetEmptyPresObj(false);
// reset left indent
SfxItemSet aSet(pModel->GetPool(), svl::Items<EE_PARA_LRSPACE, EE_PARA_LRSPACE>{} );
SfxItemSet aSet(rModel.GetPool(), svl::Items<EE_PARA_LRSPACE, EE_PARA_LRSPACE>{} );
aSet.Put(pNewObj->GetMergedItemSet());
@@ -2180,7 +2180,7 @@
// Remove subtitle shape from page
if( bUndo )
pUndoManager->AddUndoAction(pModel->GetSdrUndoFactory().CreateUndoDeleteObject(*pSourceObj));
pUndoManager->AddUndoAction(rModel.GetSdrUndoFactory().CreateUndoDeleteObject(*pSourceObj));
rPage.RemoveObject( pSourceObj->GetOrdNum() );
@@ -2220,7 +2220,7 @@
*/
SdrObject* SdPage::InsertAutoLayoutShape(SdrObject* pObj, PresObjKind eObjKind, bool bVertical, const ::tools::Rectangle& rRect, bool bInit)
{
::svl::IUndoManager* pUndoManager = static_cast<SdDrawDocument*>(pModel)->GetUndoManager();
::svl::IUndoManager* pUndoManager(static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetUndoManager());
const bool bUndo = pUndoManager && pUndoManager->IsInListAction() && IsInserted();
if (!pObj && bInit)
@@ -2235,8 +2235,8 @@
if( bUndo )
{
pUndoManager->AddUndoAction( pModel->GetSdrUndoFactory().CreateUndoGeoObject( *pObj ) );
pUndoManager->AddUndoAction( pModel->GetSdrUndoFactory().CreateUndoAttrObject( *pObj, true, true ) );
pUndoManager->AddUndoAction( getSdrModelFromSdrPage().GetSdrUndoFactory().CreateUndoGeoObject( *pObj ) );
pUndoManager->AddUndoAction( getSdrModelFromSdrPage().GetSdrUndoFactory().CreateUndoAttrObject( *pObj, true, true ) );
pUndoManager->AddUndoAction( new UndoObjectUserCall( *pObj ) );
}
@@ -2262,7 +2262,7 @@
if ( pTextObject->IsAutoGrowHeight() )
{
// switch off AutoGrowHeight, set new MinHeight
SfxItemSet aTempAttr( static_cast<SdDrawDocument*>(pModel)->GetPool() );
SfxItemSet aTempAttr( static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetPool() );
SdrMetricItem aMinHeight( makeSdrTextMinFrameHeightItem(rRect.GetSize().Height()) );
aTempAttr.Put( aMinHeight );
aTempAttr.Put( makeSdrTextAutoGrowHeightItem(false) );
@@ -2270,7 +2270,7 @@
pTextObject->SetLogicRect(rRect);
// switch on AutoGrowHeight
SfxItemSet aAttr( static_cast<SdDrawDocument*>(pModel)->GetPool() );
SfxItemSet aAttr( static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetPool() );
aAttr.Put( makeSdrTextAutoGrowHeightItem(true) );
pTextObject->SetMergedItemSet(aAttr);
@@ -2279,7 +2279,7 @@
if ( pTextObject->IsAutoGrowWidth() )
{
// switch off AutoGrowWidth , set new MinWidth
SfxItemSet aTempAttr( static_cast<SdDrawDocument*>(pModel)->GetPool() );
SfxItemSet aTempAttr( static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetPool() );
SdrMetricItem aMinWidth( makeSdrTextMinFrameWidthItem(rRect.GetSize().Width()) );
aTempAttr.Put( aMinWidth );
aTempAttr.Put( makeSdrTextAutoGrowWidthItem(false) );
@@ -2287,7 +2287,7 @@
pTextObject->SetLogicRect(rRect);
// switch on AutoGrowWidth
SfxItemSet aAttr( static_cast<SdDrawDocument*>(pModel)->GetPool() );
SfxItemSet aAttr( static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetPool() );
aAttr.Put( makeSdrTextAutoGrowWidthItem(true) );
pTextObject->SetMergedItemSet(aAttr);
}
@@ -2389,11 +2389,11 @@
if (!pOutliner)
{
SfxItemPool* pPool = static_cast<SdDrawDocument*>(GetModel())->GetDrawOutliner().GetEmptyItemSet().GetPool();
SfxItemPool* pPool(static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetDrawOutliner().GetEmptyItemSet().GetPool());
pOutl = new ::Outliner( pPool, OutlinerMode::OutlineObject );
pOutl->SetRefDevice( SD_MOD()->GetVirtualRefDevice() );
pOutl->SetEditTextObjectPool(pPool);
pOutl->SetStyleSheetPool(static_cast<SfxStyleSheetPool*>(GetModel()->GetStyleSheetPool()));
pOutl->SetStyleSheetPool(static_cast<SfxStyleSheetPool*>(getSdrModelFromSdrPage().GetStyleSheetPool()));
pOutl->EnableUndo(false);
pOutl->SetUpdateMode( false );
}
@@ -2549,7 +2549,7 @@
aCreatedPageName = SdResId(STR_PAGE);
aCreatedPageName += " ";
if( GetModel()->GetPageNumType() == css::style::NumberingType::NUMBER_NONE )
if( getSdrModelFromSdrPage().GetPageNumType() == css::style::NumberingType::NUMBER_NONE )
{
// if the document has number none as a formatting
// for page numbers we still default to arabic numbering
@@ -2558,7 +2558,7 @@
}
else
{
aCreatedPageName += static_cast<SdDrawDocument*>(GetModel())->CreatePageNumValue(nNum);
aCreatedPageName += static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).CreatePageNumValue(nNum);
}
}
else
@@ -2721,7 +2721,7 @@
{
OUString aOldName( GetName() );
FmFormPage::SetName (rName);
static_cast<SdDrawDocument*>(pModel)->UpdatePageRelativeURLs(aOldName, rName);
static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).UpdatePageRelativeURLs(aOldName, rName);
ActionChanged();
}
diff --git a/sd/source/core/sdpage2.cxx b/sd/source/core/sdpage2.cxx
index 61fd29d..3b6e42f 100644
--- a/sd/source/core/sdpage2.cxx
+++ b/sd/source/core/sdpage2.cxx
@@ -95,13 +95,13 @@
SdPage* pMaster;
SdPage* pFoundMaster = nullptr;
sal_uInt16 nMaster = 0;
sal_uInt16 nMasterCount = pModel->GetMasterPageCount();
sal_uInt16 nMasterCount = getSdrModelFromSdrPage().GetMasterPageCount();
if( !bReverseOrder )
{
for ( nMaster = 0; nMaster < nMasterCount; nMaster++ )
{
pMaster = static_cast<SdPage*>(pModel->GetMasterPage(nMaster));
pMaster = static_cast<SdPage*>(getSdrModelFromSdrPage().GetMasterPage(nMaster));
if (pMaster->GetPageKind() == mePageKind && pMaster->GetLayoutName() == maLayoutName)
{
pFoundMaster = pMaster;
@@ -113,7 +113,7 @@
{
for ( nMaster = nMasterCount; nMaster > 0; nMaster-- )
{
pMaster = static_cast<SdPage*>(pModel->GetMasterPage(nMaster - 1));
pMaster = static_cast<SdPage*>(getSdrModelFromSdrPage().GetMasterPage(nMaster - 1));
if (pMaster->GetPageKind() == mePageKind && pMaster->GetLayoutName() == maLayoutName)
{
pFoundMaster = pMaster;
@@ -126,7 +126,7 @@
// this should never happen, but we play failsafe here
if( pFoundMaster == nullptr )
pFoundMaster = static_cast< SdDrawDocument *>(pModel)->GetSdPage( 0, mePageKind );
pFoundMaster = static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetSdPage( 0, mePageKind );
if( pFoundMaster )
TRG_SetMasterPage(*pFoundMaster);
@@ -157,7 +157,7 @@
OUString aFullName;
OUString aOldFullName;
SfxStyleSheetBase* pSheet = nullptr;
SfxStyleSheetBasePool* pStShPool = pModel->GetStyleSheetPool();
SfxStyleSheetBasePool* pStShPool = getSdrModelFromSdrPage().GetStyleSheetPool();
for (sal_Int16 i = -1; i < 9; i++)
{
@@ -261,7 +261,7 @@
if (pOutlineTextObj)
{
SdStyleSheetPool* pSPool = static_cast<SdStyleSheetPool*>(pModel->GetStyleSheetPool());
SdStyleSheetPool* pSPool = static_cast<SdStyleSheetPool*>(getSdrModelFromSdrPage().GetStyleSheetPool());
DBG_ASSERT(pSPool, "StyleSheetPool missing");
OUString aTrueLayoutName(maLayoutName);
sal_Int32 nIndex = aTrueLayoutName.indexOf( SD_LT_SEPARATOR );
@@ -282,22 +282,6 @@
/*************************************************************************
|*
|* Set new model
|*
\************************************************************************/
void SdPage::SetModel(SdrModel* pNewModel)
{
DisconnectLink();
// assign model
FmFormPage::SetModel(pNewModel);
ConnectLink();
}
/*************************************************************************
|*
|* Is this page read-only?
|*
\************************************************************************/
@@ -315,17 +299,17 @@
void SdPage::ConnectLink()
{
sfx2::LinkManager* pLinkManager = pModel!=nullptr ? pModel->GetLinkManager() : nullptr;
sfx2::LinkManager* pLinkManager(getSdrModelFromSdrPage().GetLinkManager());
if (pLinkManager && !mpPageLink && !maFileName.isEmpty() && !maBookmarkName.isEmpty() &&
mePageKind==PageKind::Standard && !IsMasterPage() &&
static_cast<SdDrawDocument*>(pModel)->IsNewOrLoadCompleted())
static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).IsNewOrLoadCompleted())
{
/**********************************************************************
* Connect
* Only standard pages are allowed to be linked
**********************************************************************/
::sd::DrawDocShell* pDocSh = static_cast<SdDrawDocument*>(pModel)->GetDocSh();
::sd::DrawDocShell* pDocSh = static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()).GetDocSh();
if (!pDocSh || pDocSh->GetMedium()->GetOrigURL() != maFileName)
{
@@ -347,7 +331,7 @@
void SdPage::DisconnectLink()
{
sfx2::LinkManager* pLinkManager = pModel!=nullptr ? pModel->GetLinkManager() : nullptr;
sfx2::LinkManager* pLinkManager(getSdrModelFromSdrPage().GetLinkManager());
if (pLinkManager && mpPageLink)
{
@@ -360,57 +344,41 @@
}
}
/*************************************************************************
|*
|* Copy-Ctor
|*
\************************************************************************/
SdPage::SdPage(const SdPage& rSrcPage)
: FmFormPage(rSrcPage)
, SdrObjUserCall()
, mpItems(nullptr)
, mnPageId(mnLastPageId++)
void SdPage::lateInit(const SdPage& rSrcPage)
{
mePageKind = rSrcPage.mePageKind;
meAutoLayout = rSrcPage.meAutoLayout;
// call parent
FmFormPage::lateInit(rSrcPage);
mbSelected = false;
mnTransitionType = rSrcPage.mnTransitionType;
// copy local variables (former stuff from copy constructor)
mePageKind = rSrcPage.mePageKind;
meAutoLayout = rSrcPage.meAutoLayout;
mbSelected = false;
mnTransitionType = rSrcPage.mnTransitionType;
mnTransitionSubtype = rSrcPage.mnTransitionSubtype;
mbTransitionDirection = rSrcPage.mbTransitionDirection;
mnTransitionFadeColor = rSrcPage.mnTransitionFadeColor;
mfTransitionDuration = rSrcPage.mfTransitionDuration;
mePresChange = rSrcPage.mePresChange;
mfTime = rSrcPage.mfTime;
mbSoundOn = rSrcPage.mbSoundOn;
mbExcluded = rSrcPage.mbExcluded;
maLayoutName = rSrcPage.maLayoutName;
maSoundFile = rSrcPage.maSoundFile;
mbLoopSound = rSrcPage.mbLoopSound;
mbStopSound = rSrcPage.mbStopSound;
mePresChange = rSrcPage.mePresChange;
mfTime = rSrcPage.mfTime;
mbSoundOn = rSrcPage.mbSoundOn;
mbExcluded = rSrcPage.mbExcluded;
maLayoutName = rSrcPage.maLayoutName;
maSoundFile = rSrcPage.maSoundFile;
mbLoopSound = rSrcPage.mbLoopSound;
mbStopSound = rSrcPage.mbStopSound;
maCreatedPageName.clear();
maFileName = rSrcPage.maFileName;
maBookmarkName = rSrcPage.maBookmarkName;
mbScaleObjects = rSrcPage.mbScaleObjects;
maFileName = rSrcPage.maFileName;
maBookmarkName = rSrcPage.maBookmarkName;
mbScaleObjects = rSrcPage.mbScaleObjects;
mbBackgroundFullSize = rSrcPage.mbBackgroundFullSize;
meCharSet = rSrcPage.meCharSet;
mnPaperBin = rSrcPage.mnPaperBin;
mpPageLink = nullptr; // is set when inserting via ConnectLink()
mbIsPrecious = false;
}
void SdPage::lateInit(const SdPage& rSrcPage)
{
FmFormPage::lateInit(rSrcPage);
meCharSet = rSrcPage.meCharSet;
mnPaperBin = rSrcPage.mnPaperBin;
mpPageLink = nullptr; // is set when inserting via ConnectLink()
mbIsPrecious = false;
// use shape list directly to preserve constness of rSrcPage
const std::list< SdrObject* >& rShapeList = rSrcPage.maPresentationShapeList.getList();
for( std::list< SdrObject* >::const_iterator aIter = rShapeList.begin();
aIter != rShapeList.end(); ++aIter )
for( std::list< SdrObject* >::const_iterator aIter = rShapeList.begin(); aIter != rShapeList.end(); ++aIter )
{
SdrObject* pObj = *aIter;
InsertPresObj(GetObj(pObj->GetOrdNum()), rSrcPage.GetPresObjKind(pObj));
@@ -418,6 +386,22 @@
// header footer
setHeaderFooterSettings( rSrcPage.getHeaderFooterSettings() );
// animations
rSrcPage.cloneAnimations(*this);
// fix user calls for duplicated slide
SdrObjListIter aSourceIter( rSrcPage, SdrIterMode::DeepWithGroups );
SdrObjListIter aTargetIter( *this, SdrIterMode::DeepWithGroups );
while( aSourceIter.IsMore() && aTargetIter.IsMore() )
{
SdrObject* pSource = aSourceIter.Next();
SdrObject* pTarget = aTargetIter.Next();
if( pSource->GetUserCall() )
pTarget->SetUserCall(this);
}
}
/*************************************************************************
@@ -426,34 +410,15 @@
|*
\************************************************************************/
SdrPage* SdPage::Clone() const
{
return Clone(nullptr);
}
SdrPage* SdPage::Clone(SdrModel* pNewModel) const
{
DBG_ASSERT( pNewModel == nullptr, "sd::SdPage::Clone(), new page ignored, please check code! CL" );
SdPage* pNewPage = new SdPage(*this);
pNewPage->lateInit( *this );
cloneAnimations( *pNewPage );
// fix user calls for duplicated slide
SdrObjListIter aSourceIter( *this, SdrIterMode::DeepWithGroups );
SdrObjListIter aTargetIter( *pNewPage, SdrIterMode::DeepWithGroups );
while( aSourceIter.IsMore() && aTargetIter.IsMore() )
{
SdrObject* pSource = aSourceIter.Next();
SdrObject* pTarget = aTargetIter.Next();
if( pSource->GetUserCall() )
pTarget->SetUserCall( pNewPage );
}
return pNewPage;
SdDrawDocument& rSdDrawDocument(static_cast< SdDrawDocument& >(nullptr == pNewModel ? getSdrModelFromSdrPage() : *pNewModel));
SdPage* pClonedSdPage(
new SdPage(
rSdDrawDocument,
IsMasterPage()));
pClonedSdPage->lateInit(*this);
return pClonedSdPage;
}
/*************************************************************************
@@ -476,7 +441,7 @@
SfxItemSet* SdPage::getOrCreateItems()
{
if( mpItems == nullptr )
mpItems = o3tl::make_unique<SfxItemSet>( pModel->GetItemPool(), svl::Items<SDRATTR_XMLATTRIBUTES, SDRATTR_XMLATTRIBUTES>{} );
mpItems = o3tl::make_unique<SfxItemSet>( getSdrModelFromSdrPage().GetItemPool(), svl::Items<SDRATTR_XMLATTRIBUTES, SDRATTR_XMLATTRIBUTES>{} );
return mpItems.get();
}
@@ -604,40 +569,37 @@
maAnnotations.insert( maAnnotations.begin() + nIndex, xAnnotation );
}
if( pModel && pModel->IsUndoEnabled() )
if( getSdrModelFromSdrPage().IsUndoEnabled() )
{
SdrUndoAction* pAction = CreateUndoInsertOrRemoveAnnotation( xAnnotation, true );
if( pAction )
pModel->AddUndo( pAction );
getSdrModelFromSdrPage().AddUndo( pAction );
}
SetChanged();
if( pModel )
{
pModel->SetChanged();
NotifyDocumentEvent( static_cast< SdDrawDocument* >( pModel ), "OnAnnotationInserted", Reference<XInterface>( xAnnotation, UNO_QUERY ) );
}
getSdrModelFromSdrPage().SetChanged();
// TTTT NotifyDocumentEvent should be reference
NotifyDocumentEvent(
static_cast< SdDrawDocument* >(&getSdrModelFromSdrPage()),
"OnAnnotationInserted",
Reference<XInterface>(xAnnotation, UNO_QUERY));
}
void SdPage::removeAnnotation( const Reference< XAnnotation >& xAnnotation )
{
if( pModel && pModel->IsUndoEnabled() )
if( getSdrModelFromSdrPage().IsUndoEnabled() )
{
SdrUndoAction* pAction = CreateUndoInsertOrRemoveAnnotation( xAnnotation, false );
if( pAction )
pModel->AddUndo( pAction );
getSdrModelFromSdrPage().AddUndo( pAction );
}
AnnotationVector::iterator iter = std::find( maAnnotations.begin(), maAnnotations.end(), xAnnotation );
if( iter != maAnnotations.end() )
maAnnotations.erase( iter );
if( pModel )
{
pModel->SetChanged();
NotifyDocumentEvent( static_cast< SdDrawDocument* >( pModel ), "OnAnnotationRemoved", Reference<XInterface>( xAnnotation, UNO_QUERY ) );
}
getSdrModelFromSdrPage().SetChanged();
NotifyDocumentEvent( static_cast< SdDrawDocument* >( &getSdrModelFromSdrPage() ), "OnAnnotationRemoved", Reference<XInterface>( xAnnotation, UNO_QUERY ) );
}
void SdPage::dumpAsXml(xmlTextWriterPtr pWriter) const
diff --git a/sd/source/core/undo/undoobjects.cxx b/sd/source/core/undo/undoobjects.cxx
index 6b3a4e8..d8db132 100644
--- a/sd/source/core/undo/undoobjects.cxx
+++ b/sd/source/core/undo/undoobjects.cxx
@@ -58,7 +58,10 @@
css::uno::Reference< css::drawing::XShape > xShape( rObject.getUnoShape(), css::uno::UNO_QUERY );
if( pPage->getMainSequence()->hasEffect( xShape ) )
{
mpUndoAnimation.reset( new UndoAnimation( static_cast< SdDrawDocument* >( pPage->GetModel() ), pPage ) );
mpUndoAnimation.reset(
new UndoAnimation( // TTTT may use ref? Or just *SdrPage?
static_cast< SdDrawDocument* >(&pPage->getSdrModelFromSdrPage()),
pPage));
}
}
}
@@ -180,7 +183,10 @@
css::uno::Reference< css::drawing::XShape > xShape( rObject.getUnoShape(), css::uno::UNO_QUERY );
if( pPage->getMainSequence()->hasEffect( xShape ) )
{
mpUndoAnimation.reset( new UndoAnimation( static_cast< SdDrawDocument* >( pPage->GetModel() ), pPage ) );
mpUndoAnimation.reset(
new UndoAnimation(
static_cast< SdDrawDocument* >(&pPage->getSdrModelFromSdrPage()),
pPage));
}
}
}
diff --git a/sd/source/filter/grf/sdgrffilter.cxx b/sd/source/filter/grf/sdgrffilter.cxx
index 522f2ba..985d625 100644
--- a/sd/source/filter/grf/sdgrffilter.cxx
+++ b/sd/source/filter/grf/sdgrffilter.cxx
@@ -163,62 +163,66 @@
const sal_uInt16 nFilter = rGraphicFilter.GetImportFormatNumberForTypeName( mrMedium.GetFilter()->GetTypeName() );
bool bRet = false;
SvStream* pIStm = mrMedium.GetInStream();
ErrCode nReturn = pIStm ? rGraphicFilter.ImportGraphic( aGraphic, aFileName, *pIStm, nFilter ) : ErrCode(1);
SvStream* pIStm = mrMedium.GetInStream();
ErrCode nReturn = pIStm ? rGraphicFilter.ImportGraphic( aGraphic, aFileName, *pIStm, nFilter ) : ErrCode(1);
if( nReturn )
HandleGraphicFilterError( nReturn, rGraphicFilter.GetLastError().nStreamError );
else
if( nReturn )
HandleGraphicFilterError( nReturn, rGraphicFilter.GetLastError().nStreamError );
else
{
if( mrDocument.GetPageCount() == 0 )
mrDocument.CreateFirstPages();
SdPage* pPage = mrDocument.GetSdPage( 0, PageKind::Standard );
Point aPos;
Size aPagSize( pPage->GetSize() );
Size aGrfSize( OutputDevice::LogicToLogic( aGraphic.GetPrefSize(),
aGraphic.GetPrefMapMode(), MapMode(MapUnit::Map100thMM)));
aPagSize.AdjustWidth( -(pPage->GetLeftBorder() + pPage->GetRightBorder()) );
aPagSize.AdjustHeight( -(pPage->GetUpperBorder() + pPage->GetLowerBorder()) );
// scale to fit page
if ( ( ( aGrfSize.Height() > aPagSize.Height() ) || ( aGrfSize.Width() > aPagSize.Width() ) ) &&
aGrfSize.Height() && aPagSize.Height() )
{
if( mrDocument.GetPageCount() == 0 )
mrDocument.CreateFirstPages();
double fGrfWH = static_cast<double>(aGrfSize.Width()) / aGrfSize.Height();
double fWinWH = static_cast<double>(aPagSize.Width()) / aPagSize.Height();
SdPage* pPage = mrDocument.GetSdPage( 0, PageKind::Standard );
Point aPos;
Size aPagSize( pPage->GetSize() );
Size aGrfSize( OutputDevice::LogicToLogic( aGraphic.GetPrefSize(),
aGraphic.GetPrefMapMode(), MapMode(MapUnit::Map100thMM)));
aPagSize.AdjustWidth( -(pPage->GetLeftBorder() + pPage->GetRightBorder()) );
aPagSize.AdjustHeight( -(pPage->GetUpperBorder() + pPage->GetLowerBorder()) );
// scale to fit page
if ( ( ( aGrfSize.Height() > aPagSize.Height() ) || ( aGrfSize.Width() > aPagSize.Width() ) ) &&
aGrfSize.Height() && aPagSize.Height() )
// adjust graphic to page size (scales)
if( fGrfWH < fWinWH )
{
double fGrfWH = static_cast<double>(aGrfSize.Width()) / aGrfSize.Height();
double fWinWH = static_cast<double>(aPagSize.Width()) / aPagSize.Height();
// adjust graphic to page size (scales)
if( fGrfWH < fWinWH )
{
aGrfSize.setWidth( static_cast<long>( aPagSize.Height() * fGrfWH ) );
aGrfSize.setHeight( aPagSize.Height() );
}
else if( fGrfWH > 0.F )
{
aGrfSize.setWidth( aPagSize.Width() );
aGrfSize.setHeight( static_cast<long>( aPagSize.Width() / fGrfWH ) );
}
aGrfSize.setWidth( static_cast<long>( aPagSize.Height() * fGrfWH ) );
aGrfSize.setHeight( aPagSize.Height() );
}
// set output rectangle for graphic
aPos.setX( ( ( aPagSize.Width() - aGrfSize.Width() ) >> 1 ) + pPage->GetLeftBorder() );
aPos.setY( ( ( aPagSize.Height() - aGrfSize.Height() ) >> 1 ) + pPage->GetUpperBorder() );
pPage->InsertObject( new SdrGrafObj( aGraphic, ::tools::Rectangle( aPos, aGrfSize ) ) );
bRet = true;
else if( fGrfWH > 0.F )
{
aGrfSize.setWidth( aPagSize.Width() );
aGrfSize.setHeight( static_cast<long>( aPagSize.Width() / fGrfWH ) );
}
}
// set output rectangle for graphic
aPos.setX( ( ( aPagSize.Width() - aGrfSize.Width() ) >> 1 ) + pPage->GetLeftBorder() );
aPos.setY( ( ( aPagSize.Height() - aGrfSize.Height() ) >> 1 ) + pPage->GetUpperBorder() );
pPage->InsertObject(
new SdrGrafObj(
pPage->getSdrModelFromSdrPage(),
aGraphic,
::tools::Rectangle(aPos, aGrfSize)));
bRet = true;
}
return bRet;
}
bool SdGRFFilter::Export()
{
// SJ: todo: error handling, the GraphicExportFilter does not support proper errorhandling
bool bRet = false;
uno::Reference< uno::XComponentContext > xContext = ::comphelper::getProcessComponentContext();
uno::Reference< uno::XComponentContext > xContext = ::comphelper::getProcessComponentContext();
uno::Reference< drawing::XGraphicExportFilter > xExporter = drawing::GraphicExportFilter::create( xContext );
SdPage* pPage = nullptr;
diff --git a/sd/source/filter/ppt/pptin.cxx b/sd/source/filter/ppt/pptin.cxx
index d93fa3d..056b2924 100644
--- a/sd/source/filter/ppt/pptin.cxx
+++ b/sd/source/filter/ppt/pptin.cxx
@@ -2688,8 +2688,9 @@
aMediaURL = ReadSound( nRef );
if ( !aMediaURL.isEmpty() )
{
SdrMediaObj* pMediaObj = new SdrMediaObj( pObj->GetSnapRect() );
pMediaObj->SetModel( pObj->GetModel() );
SdrMediaObj* pMediaObj = new SdrMediaObj(
pObj->getSdrModelFromSdrObject(),
pObj->GetSnapRect());
pMediaObj->SetMergedItemSet( pObj->GetMergedItemSet() );
//--remove object from maAnimations list and add the new object instead
diff --git a/sd/source/ui/animations/motionpathtag.cxx b/sd/source/ui/animations/motionpathtag.cxx
index 373f251..c54d991 100644
--- a/sd/source/ui/animations/motionpathtag.cxx
+++ b/sd/source/ui/animations/motionpathtag.cxx
@@ -316,7 +316,7 @@
, msLastPath( pEffect->getPath() )
, mbInUpdatePath( false )
{
mpPathObj = mpEffect->createSdrPathObjFromPath();
mpPathObj = mpEffect->createSdrPathObjFromPath(rView.getSdrModelFromSdrView());
mxPolyPoly = mpPathObj->GetPathPoly();
if (mxOrigin.is())
maOriginPos = mxOrigin->getPosition();
diff --git a/sd/source/ui/app/sdmod2.cxx b/sd/source/ui/app/sdmod2.cxx
index e9d185c..37a8622 100644
--- a/sd/source/ui/app/sdmod2.cxx
+++ b/sd/source/ui/app/sdmod2.cxx
@@ -160,7 +160,7 @@
const SdrTextObj* pTextObj = pSdrOutliner->GetTextObj();
if( pTextObj )
pDoc = dynamic_cast< SdDrawDocument* >( pTextObj->GetModel() );
pDoc = dynamic_cast< SdDrawDocument* >( &pTextObj->getSdrModelFromSdrObject() );
if( pDoc )
pDocShell = pDoc->GetDocSh();
diff --git a/sd/source/ui/dlg/animobjs.cxx b/sd/source/ui/dlg/animobjs.cxx
index a9b324d..5ca6bab 100644
--- a/sd/source/ui/dlg/animobjs.cxx
+++ b/sd/source/ui/dlg/animobjs.cxx
@@ -777,12 +777,8 @@
for( size_t nObject = 0; nObject < pObjList->GetObjCount(); ++nObject )
{
SdrObject* pSnapShot = pObjList->GetObj( nObject );
BitmapEx *const pBitmapEx = new BitmapEx(
SdrExchangeView::GetObjGraphic(
pSnapShot->GetModel(), pSnapShot).GetBitmapEx() );
SdrObject* pSnapShot(pObjList->GetObj(nObject));
BitmapEx *const pBitmapEx = new BitmapEx(SdrExchangeView::GetObjGraphic(*pSnapShot).GetBitmapEx());
::tools::Time* pTime = new ::tools::Time( m_pTimeField->GetTime() );
size_t nIndex = m_nCurrentFrame + 1;
m_FrameList.insert(
@@ -830,14 +826,9 @@
for( size_t nObject= 0; nObject < nMarkCount; ++nObject )
{
// Clone
SdrObject* pObject = rMarkList.GetMark( nObject )->GetMarkedSdrObj();
BitmapEx *const pBitmapEx = new BitmapEx(
SdrExchangeView::GetObjGraphic(
pObject->GetModel(), pObject).GetBitmapEx() );
SdrObject* pObject(rMarkList.GetMark(nObject)->GetMarkedSdrObj());
BitmapEx *const pBitmapEx = new BitmapEx(SdrExchangeView::GetObjGraphic(*pObject).GetBitmapEx());
::tools::Time* pTime = new ::tools::Time( m_pTimeField->GetTime() );
size_t nIndex = m_nCurrentFrame + 1;
m_FrameList.insert(
m_FrameList.begin() + nIndex,
@@ -852,7 +843,7 @@
}
else
{
SdrObjGroup* pCloneGroup = new SdrObjGroup;
SdrObjGroup* pCloneGroup = new SdrObjGroup(rView.getSdrModelFromSdrView());
SdrObjList* pObjList = pCloneGroup->GetSubList();
for (size_t nObject= 0; nObject < nMarkCount; ++nObject)
@@ -1000,7 +991,9 @@
aAnimation.SetLoopCount( nLoopCount );
}
SdrGrafObj* pGrafObj = new SdrGrafObj( Graphic( aAnimation ) );
SdrGrafObj* pGrafObj = new SdrGrafObj(
rView.getSdrModelFromSdrView(),
Graphic(aAnimation));
const Point aOrg( aWindowCenter.X() - ( aMaxSizeLog.Width() >> 1 ), aWindowCenter.Y() - ( aMaxSizeLog.Height() >> 1 ) );
pGrafObj->SetLogicRect( ::tools::Rectangle( aOrg, aMaxSizeLog ) );
@@ -1073,7 +1066,7 @@
if(pTargetSdPage)
{
// create animation group
SdrObjGroup* pGroup = new SdrObjGroup;
SdrObjGroup* pGroup = new SdrObjGroup(rView.getSdrModelFromSdrView());
SdrObjList* pObjList = pGroup->GetSubList();
for (size_t i = 0; i < nCount; ++i)
diff --git a/sd/source/ui/func/fucon3d.cxx b/sd/source/ui/func/fucon3d.cxx
index 5fe0977..f74db13 100644
--- a/sd/source/ui/func/fucon3d.cxx
+++ b/sd/source/ui/func/fucon3d.cxx
@@ -89,6 +89,7 @@
case SID_3D_CUBE:
{
p3DObj = new E3dCubeObj(
mpView->getSdrModelFromSdrView(),
mpView->Get3DDefaultAttributes(),
::basegfx::B3DPoint(-2500, -2500, -2500),
::basegfx::B3DVector(5000, 5000, 5000));
@@ -98,6 +99,7 @@
case SID_3D_SPHERE:
{
p3DObj = new E3dSphereObj(
mpView->getSdrModelFromSdrView(),
mpView->Get3DDefaultAttributes(),
::basegfx::B3DPoint(0, 0, 0),
::basegfx::B3DVector(5000, 5000, 5000));
@@ -114,7 +116,10 @@
{
aB2DPolygon = ::basegfx::utils::adaptiveSubdivideByAngle(aB2DPolygon);
}
p3DObj = new E3dLatheObj(mpView->Get3DDefaultAttributes(), ::basegfx::B2DPolyPolygon(aB2DPolygon));
p3DObj = new E3dLatheObj(
mpView->getSdrModelFromSdrView(),
mpView->Get3DDefaultAttributes(),
::basegfx::B2DPolyPolygon(aB2DPolygon));
/* this is an open object, therefore it has to be handled double-
sided by default */
@@ -141,7 +146,10 @@
{
aB2DPolygon = ::basegfx::utils::adaptiveSubdivideByAngle(aB2DPolygon);
}
p3DObj = new E3dLatheObj(mpView->Get3DDefaultAttributes(), ::basegfx::B2DPolyPolygon(aB2DPolygon));
p3DObj = new E3dLatheObj(
mpView->getSdrModelFromSdrView(),
mpView->Get3DDefaultAttributes(),
::basegfx::B2DPolyPolygon(aB2DPolygon));
break;
}
@@ -152,7 +160,10 @@
{
aB2DPolygon = ::basegfx::utils::adaptiveSubdivideByAngle(aB2DPolygon);
}
p3DObj = new E3dLatheObj(mpView->Get3DDefaultAttributes(), ::basegfx::B2DPolyPolygon(aB2DPolygon));
p3DObj = new E3dLatheObj(
mpView->getSdrModelFromSdrView(),
mpView->Get3DDefaultAttributes(),
::basegfx::B2DPolyPolygon(aB2DPolygon));
break;
}
@@ -178,7 +189,10 @@
aInnerPoly.append(::basegfx::B2DPoint(0, -1000*5));
aInnerPoly.setClosed(true);
p3DObj = new E3dLatheObj(mpView->Get3DDefaultAttributes(), ::basegfx::B2DPolyPolygon(aInnerPoly));
p3DObj = new E3dLatheObj(
mpView->getSdrModelFromSdrView(),
mpView->Get3DDefaultAttributes(),
::basegfx::B2DPolyPolygon(aInnerPoly));
break;
}
@@ -202,7 +216,10 @@
aInnerPoly.append(::basegfx::B2DPoint(0, 1000*5));
aInnerPoly.setClosed(true);
p3DObj = new E3dLatheObj(mpView->Get3DDefaultAttributes(), ::basegfx::B2DPolyPolygon(aInnerPoly));
p3DObj = new E3dLatheObj(
mpView->getSdrModelFromSdrView(),
mpView->Get3DDefaultAttributes(),
::basegfx::B2DPolyPolygon(aInnerPoly));
break;
}
@@ -226,7 +243,10 @@
aInnerPoly.append(::basegfx::B2DPoint(0, 1000*5));
aInnerPoly.setClosed(true);
p3DObj = new E3dLatheObj(mpView->Get3DDefaultAttributes(), ::basegfx::B2DPolyPolygon(aInnerPoly));
p3DObj = new E3dLatheObj(
mpView->getSdrModelFromSdrView(),
mpView->Get3DDefaultAttributes(),
::basegfx::B2DPolyPolygon(aInnerPoly));
p3DObj->SetMergedItem(makeSvx3DHorizontalSegmentsItem(4));
break;
}
@@ -373,7 +393,7 @@
double fW(aVolume.getWidth());
double fH(aVolume.getHeight());
::tools::Rectangle a3DRect(0, 0, static_cast<long>(fW), static_cast<long>(fH));
E3dScene* pScene = new E3dScene;
E3dScene* pScene = new E3dScene(*mpDoc);
// copied code from E3dView::InitScene
double fCamZ(aVolume.getMaxZ() + ((fW + fH) / 4.0));
@@ -387,13 +407,9 @@
aCam.SetFocalLength(mpView->GetDefaultCamFocal());
aCam.SetDefaults(::basegfx::B3DPoint(0.0, 0.0, fDefaultCamPosZ), aLookAt);
pScene->SetCamera(aCam);
pScene->Insert3DObj(p3DObj);
pScene->NbcSetSnapRect(a3DRect);
pScene->SetModel(mpDoc);
ImpPrepareBasic3DShape(p3DObj, pScene);
SfxItemSet aAttr(mpDoc->GetPool());
SetStyleSheet(aAttr, p3DObj);
aAttr.Put(XLineStyleItem (drawing::LineStyle_NONE));
diff --git a/sd/source/ui/func/fuconarc.cxx b/sd/source/ui/func/fuconarc.cxx
index 7d6aca6..6967a14 100644
--- a/sd/source/ui/func/fuconarc.cxx
+++ b/sd/source/ui/func/fuconarc.cxx
@@ -91,10 +91,12 @@
Activate(); // sets aObjKind
SdrCircObj* pNewCircle =
new SdrCircObj(static_cast<SdrObjKind>(mpView->GetCurrentObjIdentifier()),
aNewRectangle,
static_cast<long>(pPhiStart->GetValue () * 10.0),
static_cast<long>(pPhiEnd->GetValue () * 10.0));
new SdrCircObj(
mpView->getSdrModelFromSdrView(),
static_cast<SdrObjKind>(mpView->GetCurrentObjIdentifier()),
aNewRectangle,
static_cast<long>(pPhiStart->GetValue () * 10.0),
static_cast<long>(pPhiEnd->GetValue () * 10.0));
SdrPageView *pPV = mpView->GetSdrPageView();
mpView->InsertObjectAtView(pNewCircle, *pPV, SdrInsertFlags::SETDEFLAYER);
@@ -202,8 +204,9 @@
{
SdrObject* pObj = SdrObjFactory::MakeNewObject(
mpView->GetCurrentObjInventor(), mpView->GetCurrentObjIdentifier(),
nullptr, mpDoc);
mpView->getSdrModelFromSdrView(),
mpView->GetCurrentObjInventor(),
mpView->GetCurrentObjIdentifier());
if(pObj)
{
diff --git a/sd/source/ui/func/fuconbez.cxx b/sd/source/ui/func/fuconbez.cxx
index e7cc868..cad7080 100644
--- a/sd/source/ui/func/fuconbez.cxx
+++ b/sd/source/ui/func/fuconbez.cxx
@@ -309,8 +309,9 @@
// case SID_DRAW_BEZIER_NOFILL: // BASIC
SdrObject* pObj = SdrObjFactory::MakeNewObject(
mpView->GetCurrentObjInventor(), mpView->GetCurrentObjIdentifier(),
nullptr, mpDoc);
mpView->getSdrModelFromSdrView(),
mpView->GetCurrentObjInventor(),
mpView->GetCurrentObjIdentifier());
if(pObj)
{
diff --git a/sd/source/ui/func/fuconcs.cxx b/sd/source/ui/func/fuconcs.cxx
index 6396eeb..97a60a3 100644
--- a/sd/source/ui/func/fuconcs.cxx
+++ b/sd/source/ui/func/fuconcs.cxx
@@ -188,7 +188,7 @@
{
const SfxItemSet& rSource = pSourceObj->GetMergedItemSet();
SfxItemSet aDest(
pObj->GetModel()->GetItemPool(),
pObj->getSdrModelFromSdrObject().GetItemPool(),
svl::Items<
// Ranges from SdrAttrObj:
SDRATTR_START, SDRATTR_SHADOW_LAST,
@@ -236,8 +236,9 @@
SdrObject* FuConstructCustomShape::CreateDefaultObject(const sal_uInt16, const ::tools::Rectangle& rRectangle)
{
SdrObject* pObj = SdrObjFactory::MakeNewObject(
mpView->GetCurrentObjInventor(), mpView->GetCurrentObjIdentifier(),
nullptr, mpDoc);
mpView->getSdrModelFromSdrView(),
mpView->GetCurrentObjInventor(),
mpView->GetCurrentObjIdentifier());
if( pObj )
{
diff --git a/sd/source/ui/func/fuconrec.cxx b/sd/source/ui/func/fuconrec.cxx
index 1377429..d78fd86 100644
--- a/sd/source/ui/func/fuconrec.cxx
+++ b/sd/source/ui/func/fuconrec.cxx
@@ -109,7 +109,10 @@
pCenterY->GetValue () - pAxisY->GetValue () / 2,
pCenterX->GetValue () + pAxisX->GetValue () / 2,
pCenterY->GetValue () + pAxisY->GetValue () / 2);
SdrCircObj *pNewCircle = new SdrCircObj (OBJ_CIRC, aNewRectangle);
SdrCircObj *pNewCircle = new SdrCircObj(
mpView->getSdrModelFromSdrView(),
OBJ_CIRC,
aNewRectangle);
SdrPageView *pPV = mpView->GetSdrPageView();
mpView->InsertObjectAtView(pNewCircle, *pPV, SdrInsertFlags::SETDEFLAYER | SdrInsertFlags::SETDEFATTR);
@@ -127,7 +130,9 @@
pMouseStartY->GetValue (),
pMouseEndX->GetValue (),
pMouseEndY->GetValue ());
SdrRectObj *pNewRect = new SdrRectObj (aNewRectangle);
SdrRectObj *pNewRect = new SdrRectObj(
mpView->getSdrModelFromSdrView(),
aNewRectangle);
SdrPageView *pPV = mpView->GetSdrPageView();
mpView->InsertObjectAtView(pNewRect, *pPV, SdrInsertFlags::SETDEFLAYER | SdrInsertFlags::SETDEFATTR);
@@ -477,9 +482,9 @@
// dimension line
SdPage* pPage = static_cast<SdPage*>( mpView->GetSdrPageView()->GetPage() );
OUString aName(SdResId(STR_POOLSHEET_MEASURE));
SfxStyleSheet* pSheet = static_cast<SfxStyleSheet*>( pPage->GetModel()->
GetStyleSheetPool()->
Find(aName, SfxStyleFamily::Para));
SfxStyleSheet* pSheet(
static_cast< SfxStyleSheet* >(
pPage->getSdrModelFromSdrPage().GetStyleSheetPool()->Find(aName, SfxStyleFamily::Para)));
DBG_ASSERT(pSheet, "StyleSheet missing");
if (pSheet)
@@ -496,10 +501,10 @@
/**
* set line starts and ends for the object to be created
*/
::basegfx::B2DPolyPolygon getPolygon(const char* pResId, SdrModel const * pDoc)
::basegfx::B2DPolyPolygon getPolygon(const char* pResId, const SdrModel& rModel)
{
::basegfx::B2DPolyPolygon aRetval;
XLineEndListRef pLineEndList = pDoc->GetLineEndList();
XLineEndListRef pLineEndList(rModel.GetLineEndList());
if( pLineEndList.is() )
{
@@ -536,9 +541,10 @@
nSlotId == SID_LINE_SQUARE_ARROW )
{
// set attributes of line start and ends
SdrModel& rModel(pObj->getSdrModelFromSdrObject()); // TTTT pObj should be reference
// arrowhead
::basegfx::B2DPolyPolygon aArrow( getPolygon( RID_SVXSTR_ARROW, mpDoc ) );
::basegfx::B2DPolyPolygon aArrow( getPolygon( RID_SVXSTR_ARROW, rModel ) );
if( !aArrow.count() )
{
::basegfx::B2DPolygon aNewArrow;
@@ -550,7 +556,7 @@
}
// Circles
::basegfx::B2DPolyPolygon aCircle( getPolygon( RID_SVXSTR_CIRCLE, mpDoc ) );
::basegfx::B2DPolyPolygon aCircle( getPolygon( RID_SVXSTR_CIRCLE, rModel ) );
if( !aCircle.count() )
{
::basegfx::B2DPolygon aNewCircle;
@@ -560,7 +566,7 @@
}
// Square
::basegfx::B2DPolyPolygon aSquare( getPolygon( RID_SVXSTR_SQUARE, mpDoc ) );
::basegfx::B2DPolyPolygon aSquare( getPolygon( RID_SVXSTR_SQUARE, rModel ) );
if( !aSquare.count() )
{
::basegfx::B2DPolygon aNewSquare;
@@ -764,8 +770,9 @@
// case SID_CONNECTOR_LINES_CIRCLES:
SdrObject* pObj = SdrObjFactory::MakeNewObject(
mpView->GetCurrentObjInventor(), mpView->GetCurrentObjIdentifier(),
nullptr, mpDoc);
mpView->getSdrModelFromSdrView(),
mpView->GetCurrentObjInventor(),
mpView->GetCurrentObjIdentifier());
if(pObj)
{
diff --git a/sd/source/ui/func/fuconstr.cxx b/sd/source/ui/func/fuconstr.cxx
index 8f376fb..9e15f47 100644
--- a/sd/source/ui/func/fuconstr.cxx
+++ b/sd/source/ui/func/fuconstr.cxx
@@ -318,9 +318,9 @@
OUString aName( pPage->GetLayoutName() );
sal_Int32 n = aName.indexOf(SD_LT_SEPARATOR) + strlen(SD_LT_SEPARATOR);
aName = aName.copy(0, n) + STR_LAYOUT_BACKGROUNDOBJECTS;
SfxStyleSheet* pSheet = static_cast<SfxStyleSheet*>(pPage->GetModel()->
GetStyleSheetPool()->
Find(aName, SfxStyleFamily::Page));
SfxStyleSheet* pSheet(
static_cast< SfxStyleSheet* >(
pPage->getSdrModelFromSdrPage().GetStyleSheetPool()->Find(aName, SfxStyleFamily::Page)));
DBG_ASSERT(pSheet, "StyleSheet missing");
if (pSheet)
{
@@ -348,9 +348,9 @@
if ( bForceNoFillStyle )
{
OUString aName(SdResId(STR_POOLSHEET_OBJWITHOUTFILL));
SfxStyleSheet* pSheet = static_cast<SfxStyleSheet*>(pPage->GetModel()->
GetStyleSheetPool()->
Find(aName, SfxStyleFamily::Para));
SfxStyleSheet* pSheet(
static_cast< SfxStyleSheet* >(
pPage->getSdrModelFromSdrPage().GetStyleSheetPool()->Find(aName, SfxStyleFamily::Para)));
DBG_ASSERT(pSheet, "Stylesheet missing");
if (pSheet)
{
diff --git a/sd/source/ui/func/fuconuno.cxx b/sd/source/ui/func/fuconuno.cxx
index 935cb0c..8ff99fd 100644
--- a/sd/source/ui/func/fuconuno.cxx
+++ b/sd/source/ui/func/fuconuno.cxx
@@ -138,8 +138,9 @@
// case SID_FM_CREATE_CONTROL:
SdrObject* pObj = SdrObjFactory::MakeNewObject(
mpView->GetCurrentObjInventor(), mpView->GetCurrentObjIdentifier(),
nullptr, mpDoc);
mpView->getSdrModelFromSdrView(),
mpView->GetCurrentObjInventor(),
mpView->GetCurrentObjIdentifier());
if(pObj)
{
diff --git a/sd/source/ui/func/fuinsert.cxx b/sd/source/ui/func/fuinsert.cxx
index 0cdd22d..ad22e00 100644
--- a/sd/source/ui/func/fuinsert.cxx
+++ b/sd/source/ui/func/fuinsert.cxx
@@ -386,7 +386,11 @@
aRect = ::tools::Rectangle(aPos, aSize);
}
SdrOle2Obj* pOleObj = new SdrOle2Obj( svt::EmbeddedObjectRef( xObj, nAspect ), aObjName, aRect );
SdrOle2Obj* pOleObj = new SdrOle2Obj(
mpView->getSdrModelFromSdrView(),
svt::EmbeddedObjectRef( xObj, nAspect ),
aObjName,
aRect);
SdrPageView* pPV = mpView->GetSdrPageView();
// if we have a pick obj we need to make this new ole a pres obj replacing the current pick obj
@@ -613,8 +617,11 @@
Point aPnt ((aPageSize.Width() - aSize.Width()) / 2,
(aPageSize.Height() - aSize.Height()) / 2);
::tools::Rectangle aRect (aPnt, aSize);
SdrOle2Obj* pObj = new SdrOle2Obj( aObjRef, aName, aRect);
SdrOle2Obj* pObj = new SdrOle2Obj(
mpView->getSdrModelFromSdrView(),
aObjRef,
aName,
aRect);
if( mpView->InsertObjectAtView(pObj, *pPV, SdrInsertFlags::SETDEFLAYER) )
{
diff --git a/sd/source/ui/func/fuinsfil.cxx b/sd/source/ui/func/fuinsfil.cxx
index fae8452..5ad65b6 100644
--- a/sd/source/ui/func/fuinsfil.cxx
+++ b/sd/source/ui/func/fuinsfil.cxx
@@ -506,7 +506,9 @@
}
else
{
SdrRectObj* pTO = new SdrRectObj(OBJ_TEXT);
SdrRectObj* pTO = new SdrRectObj(
mpView->getSdrModelFromSdrView(),
OBJ_TEXT);
pTO->SetOutlinerParaObject(pOPO);
const bool bUndo = mpView->IsUndoEnabled();
diff --git a/sd/source/ui/func/fumorph.cxx b/sd/source/ui/func/fumorph.cxx
index b78c018..03aa0b0 100644
--- a/sd/source/ui/func/fumorph.cxx
+++ b/sd/source/ui/func/fumorph.cxx
@@ -384,7 +384,7 @@
if ( pPageView )
{
SfxItemSet aSet( aSet1 );
SdrObjGroup* pObjGroup = new SdrObjGroup;
SdrObjGroup* pObjGroup = new SdrObjGroup(mpView->getSdrModelFromSdrView());
SdrObjList* pObjList = pObjGroup->GetSubList();
const size_t nCount = rPolyPolyList3D.size();
const double fStep = 1. / ( nCount + 1 );
@@ -397,7 +397,10 @@
for ( size_t i = 0; i < nCount; i++, fFactor += fStep )
{
const ::basegfx::B2DPolyPolygon& rPolyPoly3D = *rPolyPolyList3D[ i ];
SdrPathObj* pNewObj = new SdrPathObj(OBJ_POLY, rPolyPoly3D);
SdrPathObj* pNewObj = new SdrPathObj(
mpView->getSdrModelFromSdrView(),
OBJ_POLY,
rPolyPoly3D);
// line color
if ( bLineColor )
diff --git a/sd/source/ui/func/futext.cxx b/sd/source/ui/func/futext.cxx
index 300e17c..b6d81901 100644
--- a/sd/source/ui/func/futext.cxx
+++ b/sd/source/ui/func/futext.cxx
@@ -691,7 +691,7 @@
// outliner object up to now; also it needs to be set back to not
// vertical when there was a vertical one used last time.
OutlinerParaObject* pOPO = GetTextObj()->GetOutlinerParaObject();
SdrOutliner& rOutl = mxTextObj->GetModel()->GetDrawOutliner(GetTextObj());
SdrOutliner& rOutl(mxTextObj->getSdrModelFromSdrObject().GetDrawOutliner(GetTextObj()));
bool bVertical((pOPO && pOPO->IsVertical())
|| nSlotId == SID_ATTR_CHAR_VERTICAL
|| nSlotId == SID_TEXT_FITTOSIZE_VERTICAL);
@@ -1304,10 +1304,11 @@
*/
SdrObject* FuText::CreateDefaultObject(const sal_uInt16 nID, const ::tools::Rectangle& rRectangle)
{
SdrObject* pObj = SdrObjFactory::MakeNewObject(
mpView->GetCurrentObjInventor(), mpView->GetCurrentObjIdentifier(),
nullptr, mpDoc);
mpView->getSdrModelFromSdrView(),
mpView->GetCurrentObjInventor(),
mpView->GetCurrentObjIdentifier(),
nullptr);
if(pObj)
{
diff --git a/sd/source/ui/func/unoaprms.cxx b/sd/source/ui/func/unoaprms.cxx
index 021dc5b..ab46b90 100644
--- a/sd/source/ui/func/unoaprms.cxx
+++ b/sd/source/ui/func/unoaprms.cxx
@@ -27,7 +27,7 @@
// no new info created: restore data
if (!bInfoCreated)
{
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(pObject->GetModel());
SdDrawDocument* pDoc(dynamic_cast< SdDrawDocument* >(&pObject->getSdrModelFromSdrObject()));
if( pDoc )
{
SdAnimationInfo* pInfo = SdDrawDocument::GetAnimationInfo( pObject );
diff --git a/sd/source/ui/inc/unomodel.hxx b/sd/source/ui/inc/unomodel.hxx
index 67770cc..381b22b 100644
--- a/sd/source/ui/inc/unomodel.hxx
+++ b/sd/source/ui/inc/unomodel.hxx
@@ -128,6 +128,10 @@
sd::DrawViewShell* GetViewShell();
protected:
/** abstract SdrModel provider */
virtual SdrModel* getSdrModelFromUnoModel() const override;
public:
SdXImpressDocument(::sd::DrawDocShell* pShell, bool bClipBoard);
SdXImpressDocument(SdDrawDocument* pDoc, bool bClipBoard);
diff --git a/sd/source/ui/sidebar/DocumentHelper.cxx b/sd/source/ui/sidebar/DocumentHelper.cxx
index dc76d90..b933612 100644
--- a/sd/source/ui/sidebar/DocumentHelper.cxx
+++ b/sd/source/ui/sidebar/DocumentHelper.cxx
@@ -53,14 +53,11 @@
break;
// Check the presence of the source document.
SdDrawDocument* pSourceDocument = static_cast<SdDrawDocument*>(
pMasterPage->GetModel());
if (pSourceDocument == nullptr)
break;
SdDrawDocument& rSourceDocument(static_cast< SdDrawDocument& >(pMasterPage->getSdrModelFromSdrPage()));
// When the given master page already belongs to the target document
// then there is nothing more to do.
if (pSourceDocument == &rTargetDocument)
if (&rSourceDocument == &rTargetDocument)
{
pNewMasterPage = pMasterPage;
break;
@@ -70,7 +67,7 @@
// present. This is not the case when we are called during the
// creation of the slide master page because then the notes master
// page is not there.
sal_uInt16 nSourceMasterPageCount = pSourceDocument->GetMasterPageCount();
sal_uInt16 nSourceMasterPageCount = rSourceDocument.GetMasterPageCount();
if (nSourceMasterPageCount%2 == 0)
// There should be 1 handout page + n slide masters + n notes
// masters = 2*n+1. An even value indicates that a new slide
@@ -81,11 +78,11 @@
break;
// Get the slide master page.
if (pMasterPage != static_cast<SdPage*>(
pSourceDocument->GetMasterPage(nIndex)))
rSourceDocument.GetMasterPage(nIndex)))
break;
// Get the notes master page.
SdPage* pNotesMasterPage = static_cast<SdPage*>(
pSourceDocument->GetMasterPage(nIndex+1));
rSourceDocument.GetMasterPage(nIndex+1));
if (pNotesMasterPage == nullptr)
break;
@@ -161,7 +158,7 @@
SdDrawDocument* pDocument = nullptr;
if (pMasterPage != nullptr)
pDocument = dynamic_cast<SdDrawDocument*>(pMasterPage->GetModel());
pDocument = dynamic_cast< SdDrawDocument* >(&pMasterPage->getSdrModelFromSdrPage());
// Iterate over all pages and check if it references the given master
// page.
@@ -215,10 +212,8 @@
pClonedMasterPage = static_cast<SdPage*>(pMasterPage->Clone());
// Copy the necessary styles.
SdDrawDocument* pSourceDocument
= static_cast<SdDrawDocument*>(pMasterPage->GetModel());
if (pSourceDocument != nullptr)
ProvideStyles (*pSourceDocument, rTargetDocument, pClonedMasterPage);
SdDrawDocument& rSourceDocument(static_cast< SdDrawDocument& >(pMasterPage->getSdrModelFromSdrPage()));
ProvideStyles(rSourceDocument, rTargetDocument, pClonedMasterPage);
// Copy the precious flag.
pClonedMasterPage->SetPrecious(pMasterPage->IsPrecious());
@@ -310,7 +305,7 @@
::std::vector<SdPage*> aCleanedList;
for (iPage=rpPageList->begin(); iPage!=rpPageList->end(); ++iPage)
{
OSL_ASSERT(*iPage!=nullptr && (*iPage)->GetModel() == &rTargetDocument);
OSL_ASSERT(*iPage!=nullptr && &(*iPage)->getSdrModelFromSdrPage() == &rTargetDocument);
if (*iPage != nullptr && (*iPage)->GetLayoutName() != sFullLayoutName)
{
aCleanedList.push_back(*iPage);
@@ -358,28 +353,24 @@
pClonedMasterPage->SetPrecious(pMasterPage->IsPrecious());
// Copy the necessary styles.
SdDrawDocument* pSourceDocument
= static_cast<SdDrawDocument*>(pMasterPage->GetModel());
if (pSourceDocument != nullptr)
{
ProvideStyles (*pSourceDocument, rTargetDocument, pClonedMasterPage);
SdDrawDocument& rSourceDocument(static_cast< SdDrawDocument& >(pMasterPage->getSdrModelFromSdrPage()));
ProvideStyles(rSourceDocument, rTargetDocument, pClonedMasterPage);
// Now that the styles are available we can insert the cloned
// master page.
rTargetDocument.InsertMasterPage (pClonedMasterPage, nInsertionIndex);
// Now that the styles are available we can insert the cloned
// master page.
rTargetDocument.InsertMasterPage (pClonedMasterPage, nInsertionIndex);
// Adapt the size of the new master page to that of the pages in
// the document.
Size aNewSize (rTargetDocument.GetSdPage(0, pMasterPage->GetPageKind())->GetSize());
::tools::Rectangle aBorders (
pClonedMasterPage->GetLeftBorder(),
pClonedMasterPage->GetUpperBorder(),
pClonedMasterPage->GetRightBorder(),
pClonedMasterPage->GetLowerBorder());
pClonedMasterPage->ScaleObjects(aNewSize, aBorders, true);
pClonedMasterPage->SetSize(aNewSize);
pClonedMasterPage->CreateTitleAndLayout(true);
}
// Adapt the size of the new master page to that of the pages in
// the document.
Size aNewSize (rTargetDocument.GetSdPage(0, pMasterPage->GetPageKind())->GetSize());
::tools::Rectangle aBorders (
pClonedMasterPage->GetLeftBorder(),
pClonedMasterPage->GetUpperBorder(),
pClonedMasterPage->GetRightBorder(),
pClonedMasterPage->GetLowerBorder());
pClonedMasterPage->ScaleObjects(aNewSize, aBorders, true);
pClonedMasterPage->SetSize(aNewSize);
pClonedMasterPage->CreateTitleAndLayout(true);
}
return pClonedMasterPage;
@@ -406,25 +397,24 @@
// Leave early when the parameters are invalid.
if (pPage == nullptr || pMasterPage == nullptr)
return;
SdDrawDocument* pDocument = dynamic_cast<SdDrawDocument*>(pPage->GetModel());
if (pDocument == nullptr)
return;
SdDrawDocument& rDocument(dynamic_cast< SdDrawDocument& >(pPage->getSdrModelFromSdrPage()));
if ( ! pPage->IsMasterPage())
{
// 1. Remove the background object (so that, if it exists, does
// not override the new master page) and assign the master page to
// the regular slide.
pDocument->GetDocSh()->GetUndoManager()->AddUndoAction(
rDocument.GetDocSh()->GetUndoManager()->AddUndoAction(
new SdBackgroundObjUndoAction(
*pDocument, *pPage, pPage->getSdrPageProperties().GetItemSet()),
rDocument, *pPage, pPage->getSdrPageProperties().GetItemSet()),
true);
pPage->getSdrPageProperties().PutItem(XFillStyleItem(drawing::FillStyle_NONE));
pDocument->SetMasterPage (
rDocument.SetMasterPage (
(pPage->GetPageNum()-1)/2,
rsBaseLayoutName,
pDocument,
&rDocument,
false,
false);
}
@@ -432,10 +422,10 @@
{
// Find first slide that uses the master page.
SdPage* pSlide = nullptr;
sal_uInt16 nPageCount = pDocument->GetSdPageCount(PageKind::Standard);
sal_uInt16 nPageCount = rDocument.GetSdPageCount(PageKind::Standard);
for (sal_uInt16 nPage=0; nPage<nPageCount&&pSlide==nullptr; nPage++)
{
SdrPage* pCandidate = pDocument->GetSdPage(nPage,PageKind::Standard);
SdrPage* pCandidate = rDocument.GetSdPage(nPage,PageKind::Standard);
if (pCandidate != nullptr
&& pCandidate->TRG_HasMasterPage()
&& &(pCandidate->TRG_GetMasterPage()) == pPage)
@@ -448,10 +438,10 @@
{
// 2. Assign the given master pages to the first slide that was
// found above that uses the master page.
pDocument->SetMasterPage (
rDocument.SetMasterPage (
(pSlide->GetPageNum()-1)/2,
rsBaseLayoutName,
pDocument,
&rDocument,
false,
false);
}
@@ -459,7 +449,7 @@
{
// 3. Replace the master page A by a copy of the given master
// page B.
pDocument->RemoveUnnecessaryMasterPages (
rDocument.RemoveUnnecessaryMasterPages (
pPage);
}
}
@@ -479,11 +469,9 @@
OSL_ASSERT(pMasterPage != nullptr);
return nullptr;
}
SdDrawDocument* pSourceDocument = static_cast<SdDrawDocument*>(pMasterPage->GetModel());
if (pSourceDocument == nullptr)
return nullptr;
SdDrawDocument& rSourceDocument(static_cast< SdDrawDocument& >(pMasterPage->getSdrModelFromSdrPage()));
SdPage* pNotesMasterPage = static_cast<SdPage*>(
pSourceDocument->GetMasterPage(pMasterPage->GetPageNum()+1));
rSourceDocument.GetMasterPage(pMasterPage->GetPageNum()+1));
if (pNotesMasterPage == nullptr)
{
// The model is not in a valid state. Maybe a new master page
@@ -521,7 +509,7 @@
}
// Clone the master page.
if (pMasterPage->GetModel() != &rTargetDocument)
if (&pMasterPage->getSdrModelFromSdrPage() != &rTargetDocument)
{
pMasterPageInDocument = AddMasterPage (rTargetDocument, pMasterPage, nInsertionIndex);
if( rTargetDocument.IsUndoEnabled() )
@@ -532,7 +520,7 @@
pMasterPageInDocument = pMasterPage;
// Clone the notes master.
if (pNotesMasterPage->GetModel() != &rTargetDocument)
if (&pNotesMasterPage->getSdrModelFromSdrPage() != &rTargetDocument)
{
SdPage* pClonedNotesMasterPage
= AddMasterPage (rTargetDocument, pNotesMasterPage, nInsertionIndex+1);
diff --git a/sd/source/ui/table/tablefunction.cxx b/sd/source/ui/table/tablefunction.cxx
index dd3e6a4..e85d27a 100644
--- a/sd/source/ui/table/tablefunction.cxx
+++ b/sd/source/ui/table/tablefunction.cxx
@@ -183,7 +183,11 @@
aRect = ::tools::Rectangle(aPos, aSize);
}
sdr::table::SdrTableObj* pObj = new sdr::table::SdrTableObj( GetDoc(), aRect, nColumns, nRows );
sdr::table::SdrTableObj* pObj = new sdr::table::SdrTableObj(
*GetDoc(), // TTTT should be reference
aRect,
nColumns,
nRows);
pObj->NbcSetStyleSheet( GetDoc()->GetDefaultStyleSheet(), true );
apply_table_style( pObj, GetDoc(), sTableStyle );
SdrPageView* pPV = mpView->GetSdrPageView();
@@ -271,7 +275,11 @@
{
Size aSize( 200, 200 );
::tools::Rectangle aRect (Point(), aSize);
sdr::table::SdrTableObj* pObj = new sdr::table::SdrTableObj( pModel, aRect, 1, 1 );
sdr::table::SdrTableObj* pObj = new sdr::table::SdrTableObj(
*pModel,
aRect,
1,
1);
pObj->NbcSetStyleSheet( pModel->GetDefaultStyleSheet(), true );
apply_table_style( pObj, pModel, OUString() );
diff --git a/sd/source/ui/tools/PreviewRenderer.cxx b/sd/source/ui/tools/PreviewRenderer.cxx
index 158b160..23717ea 100644
--- a/sd/source/ui/tools/PreviewRenderer.cxx
+++ b/sd/source/ui/tools/PreviewRenderer.cxx
@@ -202,15 +202,9 @@
if (pPage == nullptr)
return false;
SdrModel* pModel = pPage->GetModel();
if (pModel == nullptr)
return false;
SetupOutputSize(*pPage, rPixelSize);
SdDrawDocument* pDocument
= static_cast<SdDrawDocument*>(pPage->GetModel());
DrawDocShell* pDocShell = pDocument->GetDocSh();
SdDrawDocument& rDocument(static_cast< SdDrawDocument& >(pPage->getSdrModelFromSdrPage()));
DrawDocShell* pDocShell = rDocument.GetDocSh();
// Create view
ProvideView (pDocShell);
@@ -260,9 +254,9 @@
}
pPageView->SetApplicationDocumentColor(aApplicationDocumentColor);
SdrOutliner& rOutliner(pDocument->GetDrawOutliner());
SdrOutliner& rOutliner(rDocument.GetDrawOutliner());
rOutliner.SetBackgroundColor(aApplicationDocumentColor);
rOutliner.SetDefaultLanguage(pDocument->GetLanguage(EE_CHAR_LANGUAGE));
rOutliner.SetDefaultLanguage(rDocument.GetLanguage(EE_CHAR_LANGUAGE));
mpPreviewDevice->SetBackground(Wallpaper(aApplicationDocumentColor));
mpPreviewDevice->Erase();
diff --git a/sd/source/ui/unoidl/unomodel.cxx b/sd/source/ui/unoidl/unomodel.cxx
index afe7ede..b6ee7d5 100644
--- a/sd/source/ui/unoidl/unomodel.cxx
+++ b/sd/source/ui/unoidl/unomodel.cxx
@@ -2714,6 +2714,11 @@
}
}
SdrModel* SdXImpressDocument::getSdrModelFromUnoModel() const
{
return GetDoc();
}
void SAL_CALL SdXImpressDocument::dispose()
{
if( !mbDisposed )
diff --git a/sd/source/ui/unoidl/unopage.cxx b/sd/source/ui/unoidl/unopage.cxx
index 619d842..7a34f2a 100644
--- a/sd/source/ui/unoidl/unopage.cxx
+++ b/sd/source/ui/unoidl/unopage.cxx
@@ -406,23 +406,20 @@
SdrObject* pObj = SvxFmDrawPage::CreateSdrObject_( xShape );
if( pObj && ( (pObj->GetObjInventor() != SdrInventor::Default) || (pObj->GetObjIdentifier() != OBJ_PAGE) ) )
{
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(GetPage()->GetModel());
if( pDoc )
{
// #i119287# similar to the code in the SdrObject methods the graphic and ole
// SdrObjects need another default style than the rest, see task. Adding here, too.
// TTTT: Same as for #i119287#: Can be removed in branch aw080 again
const bool bIsSdrGrafObj(dynamic_cast< const SdrGrafObj* >(pObj) != nullptr);
const bool bIsSdrOle2Obj(dynamic_cast< const SdrOle2Obj* >(pObj) != nullptr);
SdDrawDocument& rDoc(static_cast< SdDrawDocument& >(GetPage()->getSdrModelFromSdrPage()));
// #i119287# similar to the code in the SdrObject methods the graphic and ole
// SdrObjects need another default style than the rest, see task. Adding here, too.
// TTTT: Same as for #i119287#: Can be removed in branch aw080 again
const bool bIsSdrGrafObj(dynamic_cast< const SdrGrafObj* >(pObj) != nullptr);
const bool bIsSdrOle2Obj(dynamic_cast< const SdrOle2Obj* >(pObj) != nullptr);
if(bIsSdrGrafObj || bIsSdrOle2Obj)
{
pObj->NbcSetStyleSheet(pDoc->GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj(), true);
}
else
{
pObj->NbcSetStyleSheet(pDoc->GetDefaultStyleSheet(), true);
}
if(bIsSdrGrafObj || bIsSdrOle2Obj)
{
pObj->NbcSetStyleSheet(rDoc.GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj(), true);
}
else
{
pObj->NbcSetStyleSheet(rDoc.GetDefaultStyleSheet(), true);
}
}
return pObj;
@@ -518,9 +515,8 @@
pPresObj = SvxFmDrawPage::CreateSdrObject_( xShape );
if( pPresObj )
{
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(GetPage()->GetModel());
if( pDoc )
pPresObj->NbcSetStyleSheet( pDoc->GetDefaultStyleSheet(), true );
SdDrawDocument& rDoc(static_cast< SdDrawDocument& >(GetPage()->getSdrModelFromSdrPage()));
pPresObj->NbcSetStyleSheet(rDoc.GetDefaultStyleSheet(), true);
GetPage()->InsertPresObj( pPresObj, eObjKind );
}
}
@@ -685,21 +681,21 @@
if( eOri != GetPage()->GetOrientation() )
{
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(GetPage()->GetModel());
SdDrawDocument& rDoc(static_cast< SdDrawDocument& >(GetPage()->getSdrModelFromSdrPage()));
const PageKind ePageKind = GetPage()->GetPageKind();
sal_uInt16 i, nPageCnt = pDoc->GetMasterSdPageCount(ePageKind);
sal_uInt16 i, nPageCnt = rDoc.GetMasterSdPageCount(ePageKind);
for (i = 0; i < nPageCnt; i++)
{
SdPage* pPage = pDoc->GetMasterSdPage(i, ePageKind);
SdPage* pPage = rDoc.GetMasterSdPage(i, ePageKind);
pPage->SetOrientation( eOri );
}
nPageCnt = pDoc->GetSdPageCount(ePageKind);
nPageCnt = rDoc.GetSdPageCount(ePageKind);
for (i = 0; i < nPageCnt; i++)
{
SdPage* pPage = pDoc->GetSdPage(i, ePageKind);
SdPage* pPage = rDoc.GetSdPage(i, ePageKind);
pPage->SetOrientation( eOri );
}
}
@@ -781,10 +777,10 @@
SdrPage* pPage = GetPage();
if( pPage )
{
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(pPage->GetModel());
if( pDoc->GetMasterPageCount() )
SdDrawDocument& rDoc(static_cast< SdDrawDocument& >(pPage->getSdrModelFromSdrPage()));
if( rDoc.GetMasterPageCount() )
{
SdrLayerAdmin& rLayerAdmin = pDoc->GetLayerAdmin();
SdrLayerAdmin& rLayerAdmin = rDoc.GetLayerAdmin();
SdrLayerIDSet aVisibleLayers = pPage->TRG_GetMasterPageVisibleLayers();
aVisibleLayers.Set(rLayerAdmin.GetLayerID(SdResId(STR_LAYER_BCKGRND)), bVisible);
pPage->TRG_SetMasterPageVisibleLayers(aVisibleLayers);
@@ -801,10 +797,10 @@
SdrPage* pPage = GetPage();
if( pPage )
{
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(pPage->GetModel());
if( pDoc->GetMasterPageCount() )
SdDrawDocument& rDoc(static_cast< SdDrawDocument& >(pPage->getSdrModelFromSdrPage()));
if( rDoc.GetMasterPageCount() )
{
SdrLayerAdmin& rLayerAdmin = pDoc->GetLayerAdmin();
SdrLayerAdmin& rLayerAdmin = rDoc.GetLayerAdmin();
SdrLayerIDSet aVisibleLayers = pPage->TRG_GetMasterPageVisibleLayers();
aVisibleLayers.Set(rLayerAdmin.GetLayerID(SdResId(STR_LAYER_BCKGRNDOBJ)), bVisible);
pPage->TRG_SetMasterPageVisibleLayers(aVisibleLayers);
@@ -1100,39 +1096,36 @@
case WID_PAGE_PREVIEW :
case WID_PAGE_PREVIEWMETAFILE :
{
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(GetPage()->GetModel());
if ( pDoc )
SdDrawDocument& rDoc(static_cast< SdDrawDocument& >(GetPage()->getSdrModelFromSdrPage()));
::sd::DrawDocShell* pDocShell = rDoc.GetDocSh();
if ( pDocShell )
{
::sd::DrawDocShell* pDocShell = pDoc->GetDocSh();
if ( pDocShell )
sal_uInt16 nPgNum = 0;
sal_uInt16 nPageCount = rDoc.GetSdPageCount( PageKind::Standard );
sal_uInt16 nPageNumber = static_cast<sal_uInt16>( ( GetPage()->GetPageNum() - 1 ) >> 1 );
while( nPgNum < nPageCount )
{
sal_uInt16 nPgNum = 0;
sal_uInt16 nPageCount = pDoc->GetSdPageCount( PageKind::Standard );
sal_uInt16 nPageNumber = static_cast<sal_uInt16>( ( GetPage()->GetPageNum() - 1 ) >> 1 );
while( nPgNum < nPageCount )
{
pDoc->SetSelected( pDoc->GetSdPage( nPgNum, PageKind::Standard ), nPgNum == nPageNumber );
nPgNum++;
}
std::shared_ptr<GDIMetaFile> xMetaFile = pDocShell->GetPreviewMetaFile();
if (xMetaFile)
{
Size aSize( GetPage()->GetSize() );
xMetaFile->AddAction( static_cast<MetaAction*>(new MetaFillColorAction( COL_WHITE, true )), 0 );
xMetaFile->AddAction( static_cast<MetaAction*>(new MetaRectAction( ::tools::Rectangle( Point(), aSize ) )), 1 );
xMetaFile->SetPrefMapMode(MapMode(MapUnit::Map100thMM));
xMetaFile->SetPrefSize( aSize );
rDoc.SetSelected( rDoc.GetSdPage( nPgNum, PageKind::Standard ), nPgNum == nPageNumber );
nPgNum++;
}
std::shared_ptr<GDIMetaFile> xMetaFile = pDocShell->GetPreviewMetaFile();
if (xMetaFile)
{
Size aSize( GetPage()->GetSize() );
xMetaFile->AddAction( static_cast<MetaAction*>(new MetaFillColorAction( COL_WHITE, true )), 0 );
xMetaFile->AddAction( static_cast<MetaAction*>(new MetaRectAction( ::tools::Rectangle( Point(), aSize ) )), 1 );
xMetaFile->SetPrefMapMode(MapMode(MapUnit::Map100thMM));
xMetaFile->SetPrefSize( aSize );
SvMemoryStream aDestStrm( 65535, 65535 );
if (nEntry == WID_PAGE_PREVIEW)
// Preview: WMF format.
ConvertGDIMetaFileToWMF(*xMetaFile, aDestStrm, nullptr, false);
else
// PreviewMetafile: SVM format.
xMetaFile->Write(aDestStrm);
Sequence<sal_Int8> aSeq( static_cast<sal_Int8 const *>(aDestStrm.GetData()), aDestStrm.Tell() );
aAny <<= aSeq;
}
SvMemoryStream aDestStrm( 65535, 65535 );
if (nEntry == WID_PAGE_PREVIEW)
// Preview: WMF format.
ConvertGDIMetaFileToWMF(*xMetaFile, aDestStrm, nullptr, false);
else
// PreviewMetafile: SVM format.
xMetaFile->Write(aDestStrm);
Sequence<sal_Int8> aSeq( static_cast<sal_Int8 const *>(aDestStrm.GetData()), aDestStrm.Tell() );
aAny <<= aSeq;
}
}
}
@@ -1140,29 +1133,26 @@
case WID_PAGE_PREVIEWBITMAP :
{
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(GetPage()->GetModel());
if ( pDoc )
SdDrawDocument& rDoc(static_cast< SdDrawDocument& >(GetPage()->getSdrModelFromSdrPage()));
::sd::DrawDocShell* pDocShell = rDoc.GetDocSh();
if ( pDocShell )
{
::sd::DrawDocShell* pDocShell = pDoc->GetDocSh();
if ( pDocShell )
sal_uInt16 nPgNum = 0;
sal_uInt16 nPageCount = rDoc.GetSdPageCount( PageKind::Standard );
sal_uInt16 nPageNumber = static_cast<sal_uInt16>( ( GetPage()->GetPageNum() - 1 ) >> 1 );
while( nPgNum < nPageCount )
{
sal_uInt16 nPgNum = 0;
sal_uInt16 nPageCount = pDoc->GetSdPageCount( PageKind::Standard );
sal_uInt16 nPageNumber = static_cast<sal_uInt16>( ( GetPage()->GetPageNum() - 1 ) >> 1 );
while( nPgNum < nPageCount )
{
pDoc->SetSelected( pDoc->GetSdPage( nPgNum, PageKind::Standard ), nPgNum == nPageNumber );
nPgNum++;
}
std::shared_ptr<GDIMetaFile> xMetaFile = pDocShell->GetPreviewMetaFile();
BitmapEx aBitmap;
if (xMetaFile && xMetaFile->CreateThumbnail(aBitmap))
{
SvMemoryStream aMemStream;
WriteDIB(aBitmap.GetBitmap(), aMemStream, false, false);
uno::Sequence<sal_Int8> aSeq( static_cast<sal_Int8 const *>(aMemStream.GetData()), aMemStream.Tell() );
aAny <<= aSeq;
}
rDoc.SetSelected( rDoc.GetSdPage( nPgNum, PageKind::Standard ), nPgNum == nPageNumber );
nPgNum++;
}
std::shared_ptr<GDIMetaFile> xMetaFile = pDocShell->GetPreviewMetaFile();
BitmapEx aBitmap;
if (xMetaFile && xMetaFile->CreateThumbnail(aBitmap))
{
SvMemoryStream aMemStream;
WriteDIB(aBitmap.GetBitmap(), aMemStream, false, false);
uno::Sequence<sal_Int8> aSeq( static_cast<sal_Int8 const *>(aMemStream.GetData()), aMemStream.Tell() );
aAny <<= aSeq;
}
}
}
@@ -1206,10 +1196,10 @@
SdrPage* pPage = GetPage();
if( pPage )
{
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(pPage->GetModel());
if( pDoc->GetMasterPageCount() )
SdDrawDocument& rDoc(static_cast< SdDrawDocument& >(pPage->getSdrModelFromSdrPage()));
if( rDoc.GetMasterPageCount() )
{
SdrLayerAdmin& rLayerAdmin = pDoc->GetLayerAdmin();
SdrLayerAdmin& rLayerAdmin = rDoc.GetLayerAdmin();
SdrLayerIDSet aVisibleLayers = pPage->TRG_GetMasterPageVisibleLayers();
aAny <<= aVisibleLayers.IsSet(rLayerAdmin.GetLayerID(SdResId(STR_LAYER_BCKGRND)));
}
@@ -1225,10 +1215,10 @@
SdrPage* pPage = GetPage();
if( pPage )
{
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(pPage->GetModel());
if( pDoc->GetMasterPageCount() )
SdDrawDocument& rDoc(static_cast< SdDrawDocument& >(pPage->getSdrModelFromSdrPage()));
if( rDoc.GetMasterPageCount() )
{
SdrLayerAdmin& rLayerAdmin = pDoc->GetLayerAdmin();
SdrLayerAdmin& rLayerAdmin = rDoc.GetLayerAdmin();
SdrLayerIDSet aVisibleLayers = pPage->TRG_GetMasterPageVisibleLayers();
aAny <<= aVisibleLayers.IsSet(rLayerAdmin.GetLayerID(SdResId(STR_LAYER_BCKGRNDOBJ)));
}
@@ -1684,21 +1674,21 @@
{
if( nValue != GetPage()->GetLeftBorder() )
{
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(GetPage()->GetModel());
SdDrawDocument& rDoc(static_cast< SdDrawDocument& >(GetPage()->getSdrModelFromSdrPage()));
const PageKind ePageKind = GetPage()->GetPageKind();
sal_uInt16 i, nPageCnt = pDoc->GetMasterSdPageCount(ePageKind);
sal_uInt16 i, nPageCnt = rDoc.GetMasterSdPageCount(ePageKind);
for (i = 0; i < nPageCnt; i++)
{
SdPage* pPage = pDoc->GetMasterSdPage(i, ePageKind);
SdPage* pPage = rDoc.GetMasterSdPage(i, ePageKind);
pPage->SetLeftBorder( nValue );
}
nPageCnt = pDoc->GetSdPageCount(ePageKind);
nPageCnt = rDoc.GetSdPageCount(ePageKind);
for (i = 0; i < nPageCnt; i++)
{
SdPage* pPage = pDoc->GetSdPage(i, ePageKind);
SdPage* pPage = rDoc.GetSdPage(i, ePageKind);
pPage->SetLeftBorder( nValue );
}
}
@@ -1708,21 +1698,21 @@
{
if( nValue != GetPage()->GetRightBorder() )
{
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(GetPage()->GetModel());
SdDrawDocument& rDoc(static_cast< SdDrawDocument& >(GetPage()->getSdrModelFromSdrPage()));
const PageKind ePageKind = GetPage()->GetPageKind();
sal_uInt16 i, nPageCnt = pDoc->GetMasterSdPageCount(ePageKind);
sal_uInt16 i, nPageCnt = rDoc.GetMasterSdPageCount(ePageKind);
for (i = 0; i < nPageCnt; i++)
{
SdPage* pPage = pDoc->GetMasterSdPage(i, ePageKind);
SdPage* pPage = rDoc.GetMasterSdPage(i, ePageKind);
pPage->SetRightBorder( nValue );
}
nPageCnt = pDoc->GetSdPageCount(ePageKind);
nPageCnt = rDoc.GetSdPageCount(ePageKind);
for (i = 0; i < nPageCnt; i++)
{
SdPage* pPage = pDoc->GetSdPage(i, ePageKind);
SdPage* pPage = rDoc.GetSdPage(i, ePageKind);
pPage->SetRightBorder( nValue );
}
}
@@ -1732,21 +1722,21 @@
{
if( nValue != GetPage()->GetUpperBorder() )
{
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(GetPage()->GetModel());
SdDrawDocument& rDoc(static_cast< SdDrawDocument& >(GetPage()->getSdrModelFromSdrPage()));
const PageKind ePageKind = GetPage()->GetPageKind();
sal_uInt16 i, nPageCnt = pDoc->GetMasterSdPageCount(ePageKind);
sal_uInt16 i, nPageCnt = rDoc.GetMasterSdPageCount(ePageKind);
for (i = 0; i < nPageCnt; i++)
{
SdPage* pPage = pDoc->GetMasterSdPage(i, ePageKind);
SdPage* pPage = rDoc.GetMasterSdPage(i, ePageKind);
pPage->SetUpperBorder( nValue );
}
nPageCnt = pDoc->GetSdPageCount(ePageKind);
nPageCnt = rDoc.GetSdPageCount(ePageKind);
for (i = 0; i < nPageCnt; i++)
{
SdPage* pPage = pDoc->GetSdPage(i, ePageKind);
SdPage* pPage = rDoc.GetSdPage(i, ePageKind);
pPage->SetUpperBorder( nValue );
}
}
@@ -1756,21 +1746,21 @@
{
if( nValue != GetPage()->GetLowerBorder() )
{
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(GetPage()->GetModel());
SdDrawDocument& rDoc(static_cast< SdDrawDocument& >(GetPage()->getSdrModelFromSdrPage()));
const PageKind ePageKind = GetPage()->GetPageKind();
sal_uInt16 i, nPageCnt = pDoc->GetMasterSdPageCount(ePageKind);
sal_uInt16 i, nPageCnt = rDoc.GetMasterSdPageCount(ePageKind);
for (i = 0; i < nPageCnt; i++)
{
SdPage* pPage = pDoc->GetMasterSdPage(i, ePageKind);
SdPage* pPage = rDoc.GetMasterSdPage(i, ePageKind);
pPage->SetLowerBorder( nValue );
}
nPageCnt = pDoc->GetSdPageCount(ePageKind);
nPageCnt = rDoc.GetSdPageCount(ePageKind);
for (i = 0; i < nPageCnt; i++)
{
SdPage* pPage = pDoc->GetSdPage(i, ePageKind);
SdPage* pPage = rDoc.GetSdPage(i, ePageKind);
pPage->SetLowerBorder( nValue );
}
}
@@ -1811,25 +1801,25 @@
{
aSize.setWidth( nWidth );
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(GetPage()->GetModel());
SdDrawDocument& rDoc(static_cast< SdDrawDocument& >(GetPage()->getSdrModelFromSdrPage()));
const PageKind ePageKind = GetPage()->GetPageKind();
sal_uInt16 i, nPageCnt = pDoc->GetMasterSdPageCount(ePageKind);
sal_uInt16 i, nPageCnt = rDoc.GetMasterSdPageCount(ePageKind);
for (i = 0; i < nPageCnt; i++)
{
SdPage* pPage = pDoc->GetMasterSdPage(i, ePageKind);
SdPage* pPage = rDoc.GetMasterSdPage(i, ePageKind);
pPage->SetSize(aSize);
}
nPageCnt = pDoc->GetSdPageCount(ePageKind);
nPageCnt = rDoc.GetSdPageCount(ePageKind);
for (i = 0; i < nPageCnt; i++)
{
SdPage* pPage = pDoc->GetSdPage(i, ePageKind);
SdPage* pPage = rDoc.GetSdPage(i, ePageKind);
pPage->SetSize(aSize);
}
refreshpage( pDoc, ePageKind );
refreshpage( &rDoc, ePageKind );
}
}
@@ -1840,25 +1830,25 @@
{
aSize.setHeight( nHeight );
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(GetPage()->GetModel());
SdDrawDocument& rDoc(static_cast< SdDrawDocument& >(GetPage()->getSdrModelFromSdrPage()));
const PageKind ePageKind = GetPage()->GetPageKind();
sal_uInt16 i, nPageCnt = pDoc->GetMasterSdPageCount(ePageKind);
sal_uInt16 i, nPageCnt = rDoc.GetMasterSdPageCount(ePageKind);
for (i = 0; i < nPageCnt; i++)
{
SdPage* pPage = pDoc->GetMasterSdPage(i, ePageKind);
SdPage* pPage = rDoc.GetMasterSdPage(i, ePageKind);
pPage->SetSize(aSize);
}
nPageCnt = pDoc->GetSdPageCount(ePageKind);
nPageCnt = rDoc.GetSdPageCount(ePageKind);
for (i = 0; i < nPageCnt; i++)
{
SdPage* pPage = pDoc->GetSdPage(i, ePageKind);
SdPage* pPage = rDoc.GetSdPage(i, ePageKind);
pPage->SetSize(aSize);
}
refreshpage( pDoc, ePageKind );
refreshpage( &rDoc, ePageKind );
}
}
@@ -2389,7 +2379,7 @@
pNotesPage->TRG_ClearMasterPage();
sal_uInt16 nNum = SvxFmDrawPage::mpPage->TRG_GetMasterPage().GetPageNum() + 1;
pNotesPage->TRG_SetMasterPage(*SvxFmDrawPage::mpPage->GetModel()->GetMasterPage(nNum));
pNotesPage->TRG_SetMasterPage(*SvxFmDrawPage::mpPage->getSdrModelFromSdrPage().GetMasterPage(nNum));
pNotesPage->SetLayoutName( pSdPage->GetLayoutName() );
GetModel()->SetModified();
@@ -2486,7 +2476,7 @@
if( pBack )
{
pBack->fillItemSet( static_cast<SdDrawDocument*>(GetPage()->GetModel()), aSet );
pBack->fillItemSet( static_cast<SdDrawDocument*>(&GetPage()->getSdrModelFromSdrPage()), aSet );
}
else
{
@@ -2510,7 +2500,7 @@
pProp++;
}
pBackground->fillItemSet( static_cast<SdDrawDocument*>(GetPage()->GetModel()), aSet );
pBackground->fillItemSet( static_cast<SdDrawDocument*>(&GetPage()->getSdrModelFromSdrPage()), aSet );
}
if( aSet.Count() == 0 )
@@ -2872,7 +2862,7 @@
if( pBack )
{
pBack->fillItemSet( static_cast<SdDrawDocument*>(GetPage()->GetModel()), aSet );
pBack->fillItemSet( static_cast<SdDrawDocument*>(&GetPage()->getSdrModelFromSdrPage()), aSet );
}
else
{
@@ -2895,11 +2885,11 @@
pProp++;
}
pBackground->fillItemSet( static_cast<SdDrawDocument*>(SvxFmDrawPage::mpPage->GetModel()), aSet );
pBackground->fillItemSet( static_cast<SdDrawDocument*>(&SvxFmDrawPage::mpPage->getSdrModelFromSdrPage()), aSet );
}
// if we find the background style, copy the set to the background
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(SvxFmDrawPage::mpPage->GetModel());
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(&SvxFmDrawPage::mpPage->getSdrModelFromSdrPage());
SfxStyleSheetBasePool* pSSPool = pDoc->GetStyleSheetPool();
if(pSSPool)
{
@@ -2943,7 +2933,7 @@
}
else
{
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(SvxFmDrawPage::mpPage->GetModel());
SdDrawDocument* pDoc = static_cast<SdDrawDocument*>(&SvxFmDrawPage::mpPage->getSdrModelFromSdrPage());
SfxStyleSheetBasePool* pSSPool = pDoc->GetStyleSheetPool();
if(pSSPool)
{
@@ -3092,9 +3082,9 @@
{
Reference< uno::XInterface > xPage;
if( pPage && pPage->GetModel() )
if( pPage )
{
SdXImpressDocument* pModel = SdXImpressDocument::getImplementation( pPage->GetModel()->getUnoModel() );
SdXImpressDocument* pModel = SdXImpressDocument::getImplementation( pPage->getSdrModelFromSdrPage().getUnoModel() );
if( pModel )
{
if( pPage->IsMasterPage() )
diff --git a/sd/source/ui/view/DocumentRenderer.cxx b/sd/source/ui/view/DocumentRenderer.cxx
index c89213c..4321466 100644
--- a/sd/source/ui/view/DocumentRenderer.cxx
+++ b/sd/source/ui/view/DocumentRenderer.cxx
@@ -1526,7 +1526,10 @@
std::vector< ::tools::Rectangle >::iterator iter( aAreas.begin() );
while( iter != aAreas.end() )
{
pHandout->NbcInsertObject( new SdrPageObj((*iter++)) );
pHandout->NbcInsertObject(
new SdrPageObj(
rModel,
(*iter++)));
if( bDrawLines && (iter != aAreas.end()) )
{
@@ -1546,7 +1549,10 @@
aPathPoly.append( aPoly );
}
SdrPathObj* pPathObj = new SdrPathObj(OBJ_PATHLINE, aPathPoly );
SdrPathObj* pPathObj = new SdrPathObj(
rModel,
OBJ_PATHLINE,
aPathPoly);
pPathObj->SetMergedItem(XLineStyleItem(drawing::LineStyle_SOLID));
pPathObj->SetMergedItem(XLineColorItem(OUString(), COL_BLACK));
diff --git a/sd/source/ui/view/drawview.cxx b/sd/source/ui/view/drawview.cxx
index 56a07fd..95a4807 100644
--- a/sd/source/ui/view/drawview.cxx
+++ b/sd/source/ui/view/drawview.cxx
@@ -78,12 +78,15 @@
* that there is no page a page is created.
*/
DrawView::DrawView( DrawDocShell* pDocSh, OutputDevice* pOutDev, DrawViewShell* pShell)
: ::sd::View(*pDocSh->GetDoc(), pOutDev, pShell)
, mpDocShell(pDocSh)
, mpDrawViewShell(pShell)
, mpVDev(nullptr)
, mnPOCHSmph(0)
DrawView::DrawView(
DrawDocShell* pDocSh,
OutputDevice* pOutDev,
DrawViewShell* pShell)
: ::sd::View(*pDocSh->GetDoc(), pOutDev, pShell)
,mpDocShell(pDocSh)
,mpDrawViewShell(pShell)
,mpVDev(nullptr)
,mnPOCHSmph(0)
{
SetCurrentObj(OBJ_RECT);
}
diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx
index f61052b..bbfd4e0 100644
--- a/sd/source/ui/view/drviews2.cxx
+++ b/sd/source/ui/view/drviews2.cxx
@@ -520,7 +520,9 @@
if (!pMasterPage)
continue;
SdrRectObj* pObject = new SdrRectObj(OBJ_TEXT);
SdrRectObj* pObject = new SdrRectObj(
*m_rDrawViewShell.GetDoc(), // TTTT should be reference
OBJ_TEXT);
pObject->SetMergedItem(makeSdrTextAutoGrowWidthItem(true));
pObject->SetOutlinerParaObject(pOutliner->CreateParaObject());
pMasterPage->InsertObject(pObject);
@@ -1085,7 +1087,9 @@
}
// create new object
SdrGrafObj* pGraphicObj = new SdrGrafObj (aGraphic);
SdrGrafObj* pGraphicObj = new SdrGrafObj(
*GetDoc(),
aGraphic);
// get some necessary info and ensure it
const SdrMarkList& rMarkList(mpDrawView->GetMarkedObjectList());
@@ -2339,7 +2343,9 @@
pOutl->QuickInsertField( *pFieldItem, ESelection() );
OutlinerParaObject* pOutlParaObject = pOutl->CreateParaObject();
SdrRectObj* pRectObj = new SdrRectObj( OBJ_TEXT );
SdrRectObj* pRectObj = new SdrRectObj(
*GetDoc(),
OBJ_TEXT);
pRectObj->SetMergedItem(makeSdrTextAutoGrowWidthItem(true));
pOutl->UpdateFields();
diff --git a/sd/source/ui/view/drviews8.cxx b/sd/source/ui/view/drviews8.cxx
index 1181d6c..e396b8e 100644
--- a/sd/source/ui/view/drviews8.cxx
+++ b/sd/source/ui/view/drviews8.cxx
@@ -120,7 +120,10 @@
if( bInsertNewObject )
{
auto pGrafObj = new SdrGrafObj( Graphic( aScanBmp ), aRect );
auto pGrafObj = new SdrGrafObj(
GetView()->getSdrModelFromSdrView(),
Graphic(aScanBmp),
aRect);
SdrPageView* pPV = GetView()->GetSdrPageView();
GetView()->InsertObjectAtView( pGrafObj, *pPV, SdrInsertFlags::SETDEFLAYER );
}
diff --git a/sd/source/ui/view/drviews9.cxx b/sd/source/ui/view/drviews9.cxx
index 4c2e6b1..afc151b 100644
--- a/sd/source/ui/view/drviews9.cxx
+++ b/sd/source/ui/view/drviews9.cxx
@@ -169,7 +169,10 @@
if( bInsertNewObject )
{
pGrafObj = new SdrGrafObj(aGraphic, aRect);
pGrafObj = new SdrGrafObj(
GetView()->getSdrModelFromSdrView(),
aGraphic,
aRect);
SdrPageView* pPV = mpDrawView->GetSdrPageView();
mpDrawView->InsertObjectAtView(pGrafObj, *pPV, SdrInsertFlags::SETDEFLAYER);
}
diff --git a/sd/source/ui/view/drviewse.cxx b/sd/source/ui/view/drviewse.cxx
index 0b082d9..8b69d36 100644
--- a/sd/source/ui/view/drviewse.cxx
+++ b/sd/source/ui/view/drviewse.cxx
@@ -1458,7 +1458,9 @@
pOutl->QuickInsertField( aURLItem, ESelection() );
OutlinerParaObject* pOutlParaObject = pOutl->CreateParaObject();
SdrRectObj* pRectObj = new SdrRectObj(OBJ_TEXT);
SdrRectObj* pRectObj = new SdrRectObj(
GetView()->getSdrModelFromSdrView(),
OBJ_TEXT);
pOutl->UpdateFields();
pOutl->SetUpdateMode( true );
@@ -1534,8 +1536,12 @@
if (bNewObj) try
{
SdrUnoObj* pUnoCtrl = static_cast< SdrUnoObj* >( SdrObjFactory::MakeNewObject(SdrInventor::FmForm, OBJ_FM_BUTTON,
mpDrawView->GetSdrPageView()->GetPage(), GetDoc()) );
SdrUnoObj* pUnoCtrl = static_cast< SdrUnoObj* >(
SdrObjFactory::MakeNewObject(
GetView()->getSdrModelFromSdrView(),
SdrInventor::FmForm,
OBJ_FM_BUTTON,
mpDrawView->GetSdrPageView()->GetPage()));
Reference< awt::XControlModel > xControlModel( pUnoCtrl->GetUnoControlModel(), uno::UNO_QUERY_THROW );
Reference< beans::XPropertySet > xPropSet( xControlModel, uno::UNO_QUERY_THROW );
diff --git a/sd/source/ui/view/frmview.cxx b/sd/source/ui/view/frmview.cxx
index 3795f9e..b08896a 100644
--- a/sd/source/ui/view/frmview.cxx
+++ b/sd/source/ui/view/frmview.cxx
@@ -51,7 +51,7 @@
namespace sd {
FrameView::FrameView(SdDrawDocument* pDrawDoc, FrameView* pFrameView /* = NULK */)
: SdrView(pDrawDoc, nullptr),
: SdrView(*pDrawDoc, nullptr), // TTTT SdDrawDocument* -> should be reference
mnRefCount(0),
mnPresViewShellId(SID_VIEWSHELL0),
mbIsNavigatorShowingAllShapes(false)
diff --git a/sd/source/ui/view/sdview.cxx b/sd/source/ui/view/sdview.cxx
index d0344d2..7bff930 100644
--- a/sd/source/ui/view/sdview.cxx
+++ b/sd/source/ui/view/sdview.cxx
@@ -104,10 +104,11 @@
using namespace sdr::table;
namespace sd {
View::View(SdDrawDocument& rDrawDoc, OutputDevice* pOutDev,
ViewShell* pViewShell)
: FmFormView(&rDrawDoc, pOutDev),
View::View(
SdDrawDocument& rDrawDoc,
OutputDevice* pOutDev,
ViewShell* pViewShell)
: FmFormView(rDrawDoc, pOutDev),
mrDoc(rDrawDoc),
mpDocSh(rDrawDoc.GetDocSh()),
mpViewSh(pViewShell),
@@ -658,7 +659,7 @@
EventMultiplexerEventId::BeginTextEdit, static_cast<void*>(pObj) );
if( pOutl==nullptr && pObj )
pOutl = SdrMakeOutliner(OutlinerMode::TextObject, *pObj->GetModel());
pOutl = SdrMakeOutliner(OutlinerMode::TextObject, pObj->getSdrModelFromSdrObject());
// make draw&impress specific initialisations
if( pOutl )
diff --git a/sd/source/ui/view/sdview3.cxx b/sd/source/ui/view/sdview3.cxx
index c0f5f5e..cf6f728 100644
--- a/sd/source/ui/view/sdview3.cxx
+++ b/sd/source/ui/view/sdview3.cxx
@@ -797,7 +797,11 @@
aNewSet.Put( pObj->GetMergedItemSet() );
if( bUndo )
AddUndo( new E3dAttributesUndoAction( mrDoc, static_cast<E3dObject*>(pPickObj), aNewSet, aOldSet ) );
AddUndo(
new E3dAttributesUndoAction(
*static_cast< E3dObject* >(pPickObj),
aNewSet,
aOldSet));
pPickObj->SetMergedItemSetAndBroadcast( aNewSet );
}
@@ -995,7 +999,11 @@
maDropPos.AdjustY( -(std::min( aSize.Height(), aMaxSize.Height() ) >> 1) );
::tools::Rectangle aRect( maDropPos, aSize );
SdrOle2Obj* pObj = new SdrOle2Obj( aObjRef, aName, aRect );
SdrOle2Obj* pObj = new SdrOle2Obj(
getSdrModelFromSdrView(),
aObjRef,
aName,
aRect);
SdrPageView* pPV = GetSdrPageView();
SdrInsertFlags nOptions = SdrInsertFlags::SETDEFLAYER;
@@ -1165,7 +1173,11 @@
maDropPos.AdjustY( -(std::min( aSize.Height(), aMaxSize.Height() ) >> 1) );
::tools::Rectangle aRect( maDropPos, aSize );
SdrOle2Obj* pObj = new SdrOle2Obj( aObjRef, aName, aRect );
SdrOle2Obj* pObj = new SdrOle2Obj(
getSdrModelFromSdrView(),
aObjRef,
aName,
aRect);
SdrPageView* pPV = GetSdrPageView();
SdrInsertFlags nOptions = SdrInsertFlags::SETDEFLAYER;
diff --git a/sd/source/ui/view/sdview4.cxx b/sd/source/ui/view/sdview4.cxx
index f98a8ab..fb17fcc 100644
--- a/sd/source/ui/view/sdview4.cxx
+++ b/sd/source/ui/view/sdview4.cxx
@@ -116,7 +116,10 @@
}
else
{
pNewGrafObj = new SdrGrafObj( rGraphic, pPickObj->GetLogicRect() );
pNewGrafObj = new SdrGrafObj(
getSdrModelFromSdrView(),
rGraphic,
pPickObj->GetLogicRect());
pNewGrafObj->SetEmptyPresObj(true);
}
@@ -189,7 +192,10 @@
MapMode( MapUnit::Map100thMM ) );
}
pNewGrafObj = new SdrGrafObj( rGraphic, ::tools::Rectangle( rPos, aSize ) );
pNewGrafObj = new SdrGrafObj(
getSdrModelFromSdrView(),
rGraphic,
::tools::Rectangle(rPos, aSize));
SdrPage* pPage = pPV->GetPage();
Size aPageSize( pPage->GetSize() );
aPageSize.AdjustWidth( -(pPage->GetLeftBorder() + pPage->GetRightBorder()) );
@@ -329,7 +335,9 @@
pUserCall = pPickObj->GetUserCall(); // ReplaceObjectAtView can free pPickObj
}
pNewMediaObj = new SdrMediaObj( aRect );
pNewMediaObj = new SdrMediaObj(
getSdrModelFromSdrView(),
aRect);
bool bIsPres = false;
if( pPickObj )
@@ -529,7 +537,11 @@
aRect = ::tools::Rectangle( maDropPos, aSize );
SdrOle2Obj* pOleObj = new SdrOle2Obj( svt::EmbeddedObjectRef( xObj, nAspect ), aName, aRect );
SdrOle2Obj* pOleObj = new SdrOle2Obj(
getSdrModelFromSdrView(),
svt::EmbeddedObjectRef(xObj, nAspect),
aName,
aRect);
SdrInsertFlags nOptions = SdrInsertFlags::SETDEFLAYER;
if (mpViewSh != nullptr)
diff --git a/svx/inc/dragmt3d.hxx b/svx/inc/dragmt3d.hxx
index d8eba43..2ac1274 100644
--- a/svx/inc/dragmt3d.hxx
+++ b/svx/inc/dragmt3d.hxx
@@ -30,7 +30,7 @@
class E3dDragMethodUnit
{
public:
E3dObject* mp3DObj;
E3dObject& mr3DObj;
basegfx::B3DPolyPolygon maWireframePoly;
basegfx::B3DHomMatrix maDisplayTransform;
basegfx::B3DHomMatrix maInvDisplayTransform;
@@ -39,8 +39,8 @@
sal_Int32 mnStartAngle;
sal_Int32 mnLastAngle;
E3dDragMethodUnit()
: mp3DObj(nullptr),
E3dDragMethodUnit(E3dObject& r3DObj)
: mr3DObj(r3DObj),
maWireframePoly(),
maDisplayTransform(),
maInvDisplayTransform(),
@@ -48,7 +48,8 @@
maTransform(),
mnStartAngle(0),
mnLastAngle(0)
{}
{
}
};
// Derivative of SdrDragMethod for 3D objects
diff --git a/svx/inc/sdr/properties/attributeproperties.hxx b/svx/inc/sdr/properties/attributeproperties.hxx
index 6034426..d12374f3 100644
--- a/svx/inc/sdr/properties/attributeproperties.hxx
+++ b/svx/inc/sdr/properties/attributeproperties.hxx
@@ -31,6 +31,12 @@
{
class AttributeProperties : public DefaultProperties, public SfxListener, public svl::StyleSheetUser
{
// get the correct (#119287#) default SfyStyleSheet from SdrObject's SdrModel
SfxStyleSheet* ImpGetDefaultStyleSheet() const;
// core to set parent at SfxItemSet and to execute the hard attribute computations
void ImpSetParentAtSfxItemSet(bool bDontRemoveHardAttr);
// add style sheet, do all the necessary handling
void ImpAddStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
@@ -60,6 +66,10 @@
// Clone() operator, normally just calls the local copy constructor
virtual BaseProperties& Clone(SdrObject& rObj) const override;
// Get the local ItemSet. This directly returns the local ItemSet of the object. No
// merging of ItemSets is done for e.g. Group objects.
virtual const SfxItemSet& GetObjectItemSet() const override;
// destructor
virtual ~AttributeProperties() override;
@@ -69,12 +79,6 @@
// get the installed StyleSheet
virtual SfxStyleSheet* GetStyleSheet() const override;
// Move properties to a new ItemPool.
virtual void MoveToItemPool(SfxItemPool* pSrcPool, SfxItemPool* pDestPool, SdrModel* pNewModel) override;
// Set new model.
virtual void SetModel(SdrModel* pOldModel, SdrModel* pNewModel) override;
// force all attributes which come from styles to hard attributes
// to be able to live without the style.
virtual void ForceStyleToHardAttributes() override;
diff --git a/svx/inc/sdr/properties/e3dsceneproperties.hxx b/svx/inc/sdr/properties/e3dsceneproperties.hxx
index 3705fd6..00d3777 100644
--- a/svx/inc/sdr/properties/e3dsceneproperties.hxx
+++ b/svx/inc/sdr/properties/e3dsceneproperties.hxx
@@ -68,9 +68,6 @@
// get the installed StyleSheet
virtual SfxStyleSheet* GetStyleSheet() const override;
// Move properties to a new ItemPool. Default implementation does nothing.
virtual void MoveToItemPool(SfxItemPool* pSrcPool, SfxItemPool* pDestPool, SdrModel* pNewModel) override;
// Special for scene:
void SetSceneItemsFromCamera();
};
diff --git a/svx/inc/sdr/properties/groupproperties.hxx b/svx/inc/sdr/properties/groupproperties.hxx
index af197dc..9b6b28a 100644
--- a/svx/inc/sdr/properties/groupproperties.hxx
+++ b/svx/inc/sdr/properties/groupproperties.hxx
@@ -103,9 +103,6 @@
// DefaultProperties::GetObjectItemSet() if a new ItemSet is created
virtual void ForceDefaultAttributes() override;
// Move properties to a new ItemPool.
virtual void MoveToItemPool(SfxItemPool* pSrcPool, SfxItemPool* pDestPool, SdrModel* pNewModel) override;
// force all attributes which come from styles to hard attributes
// to be able to live without the style.
virtual void ForceStyleToHardAttributes() override;
diff --git a/svx/source/accessibility/AccessibleEmptyEditSource.cxx b/svx/source/accessibility/AccessibleEmptyEditSource.cxx
index 6cbd41f..19a09ec 100644
--- a/svx/source/accessibility/AccessibleEmptyEditSource.cxx
+++ b/svx/source/accessibility/AccessibleEmptyEditSource.cxx
@@ -218,8 +218,7 @@
mrViewWindow(rViewWindow),
mbEditSourceEmpty( true )
{
if( mrObj.GetModel() )
StartListening( *mrObj.GetModel() );
StartListening( mrObj.getSdrModelFromSdrObject() );
}
AccessibleEmptyEditSource::~AccessibleEmptyEditSource()
@@ -232,8 +231,7 @@
}
else
{
if( mrObj.GetModel() )
EndListening( *mrObj.GetModel() );
EndListening( mrObj.getSdrModelFromSdrObject() );
}
}
@@ -256,8 +254,7 @@
void AccessibleEmptyEditSource::Switch2ProxyEditSource()
{
// deregister EmptyEditSource model listener
if( mrObj.GetModel() )
EndListening( *mrObj.GetModel() );
EndListening( mrObj.getSdrModelFromSdrObject() );
::std::unique_ptr< SvxEditSource > pProxySource( new AccessibleProxyEditSource_Impl(mrObj, mrView, mrViewWindow) );
mpEditSource.swap(pProxySource);
diff --git a/svx/source/accessibility/AccessibleGraphicShape.cxx b/svx/source/accessibility/AccessibleGraphicShape.cxx
index 31c4690f..fba25f4 100644
--- a/svx/source/accessibility/AccessibleGraphicShape.cxx
+++ b/svx/source/accessibility/AccessibleGraphicShape.cxx
@@ -169,7 +169,7 @@
// Return this object's role.
sal_Int16 SAL_CALL AccessibleGraphicShape::getAccessibleRole()
{
if( m_pShape->GetModel()->GetImageMapForObject(m_pShape) != nullptr )
if( m_pShape->getSdrModelFromSdrObject().GetImageMapForObject(m_pShape) != nullptr )
return AccessibleRole::IMAGE_MAP;
else
return AccessibleShape::getAccessibleRole();
diff --git a/svx/source/core/extedit.cxx b/svx/source/core/extedit.cxx
index a00216d..dab3052 100644
--- a/svx/source/core/extedit.cxx
+++ b/svx/source/core/extedit.cxx
@@ -154,12 +154,13 @@
}
SdrExternalToolEdit::SdrExternalToolEdit(
FmFormView *const pView, SdrObject *const pObj)
: m_pView(pView)
, m_pObj(pObj)
FmFormView* pView,
SdrObject* pObj)
: m_pView(pView)
,m_pObj(pObj)
{
assert(m_pObj && m_pView);
StartListening(*m_pObj->GetModel());
StartListening(m_pObj->getSdrModelFromSdrObject());
}
diff --git a/svx/source/customshapes/EnhancedCustomShape2d.cxx b/svx/source/customshapes/EnhancedCustomShape2d.cxx
index 2386b58..f2a00fe 100644
--- a/svx/source/customshapes/EnhancedCustomShape2d.cxx
+++ b/svx/source/customshapes/EnhancedCustomShape2d.cxx
@@ -1980,7 +1980,10 @@
{
basegfx::B2DPolyPolygon aClosedPolyPolygon(aNewB2DPolyPolygon);
aClosedPolyPolygon.setClosed(true);
SdrPathObj* pFill = new SdrPathObj(OBJ_POLY, aClosedPolyPolygon);
SdrPathObj* pFill = new SdrPathObj(
mrSdrObjCustomShape.getSdrModelFromSdrObject(),
OBJ_POLY,
aClosedPolyPolygon);
SfxItemSet aTempSet(*this);
aTempSet.Put(makeSdrShadowItem(false));
aTempSet.Put(XLineStyleItem(drawing::LineStyle_NONE));
@@ -1995,6 +1998,7 @@
// to correct the polygon (here: open it) using the type, the last edge may get lost.
// Thus, use a type that fits the polygon
SdrPathObj* pStroke = new SdrPathObj(
mrSdrObjCustomShape.getSdrModelFromSdrObject(),
aNewB2DPolyPolygon.isClosed() ? OBJ_POLY : OBJ_PLIN,
aNewB2DPolyPolygon);
SfxItemSet aTempSet(*this);
@@ -2014,6 +2018,7 @@
{
// see comment above about OBJ_PLIN
pObj = new SdrPathObj(
mrSdrObjCustomShape.getSdrModelFromSdrObject(),
aNewB2DPolyPolygon.isClosed() ? OBJ_POLY : OBJ_PLIN,
aNewB2DPolyPolygon);
aTempSet.Put(XFillStyleItem(drawing::FillStyle_NONE));
@@ -2021,7 +2026,10 @@
else
{
aNewB2DPolyPolygon.setClosed(true);
pObj = new SdrPathObj(OBJ_POLY, aNewB2DPolyPolygon);
pObj = new SdrPathObj(
mrSdrObjCustomShape.getSdrModelFromSdrObject(),
OBJ_POLY,
aNewB2DPolyPolygon);
}
if(bNoStroke)
@@ -2372,7 +2380,7 @@
// copy remaining objects to pRet
if(vObjectList.size() > 1)
{
pRet = new SdrObjGroup;
pRet = new SdrObjGroup(mrSdrObjCustomShape.getSdrModelFromSdrObject());
for ( std::pair< SdrPathObj*, double >& rCandidate : vObjectList )
{
@@ -2404,7 +2412,7 @@
if ( eSpType == mso_sptRectangle )
{
pRet = new SdrRectObj( aLogicRect );
pRet = new SdrRectObj(mrSdrObjCustomShape.getSdrModelFromSdrObject(), aLogicRect);
pRet->SetMergedItemSet( *this );
}
if ( !pRet )
diff --git a/svx/source/customshapes/EnhancedCustomShape3d.cxx b/svx/source/customshapes/EnhancedCustomShape3d.cxx
index 60177fc..a0e2a6b 100644
--- a/svx/source/customshapes/EnhancedCustomShape3d.cxx
+++ b/svx/source/customshapes/EnhancedCustomShape3d.cxx
@@ -255,27 +255,24 @@
const SdrObject* pShape2d,
const SdrObjCustomShape& rSdrObjCustomShape)
{
SdrObject* pRet = nullptr;
SdrModel* pModel = rSdrObjCustomShape.GetModel();
const SdrCustomShapeGeometryItem& rGeometryItem = rSdrObjCustomShape.GetMergedItem( SDRATTR_CUSTOMSHAPE_GEOMETRY );
SdrObject* pRet(nullptr);
const SdrCustomShapeGeometryItem& rGeometryItem(rSdrObjCustomShape.GetMergedItem(SDRATTR_CUSTOMSHAPE_GEOMETRY));
double fMap(1.0), *pMap = nullptr;
Fraction aFraction( rSdrObjCustomShape.getSdrModelFromSdrObject().GetScaleFraction() );
double fMap, *pMap = nullptr;
if ( pModel )
if ( aFraction.GetNumerator() != 1 || aFraction.GetDenominator() != 1 )
{
fMap = 1.0;
Fraction aFraction( pModel->GetScaleFraction() );
if ( aFraction.GetNumerator() != 1 || aFraction.GetDenominator() != 1 )
{
fMap *= double(aFraction);
pMap = &fMap;
}
if ( pModel->GetScaleUnit() != MapUnit::Map100thMM )
{
DBG_ASSERT( pModel->GetScaleUnit() == MapUnit::MapTwip, "EnhancedCustomShape3d::Current MapMode is Unsupported" );
fMap *= 1440.0 / 2540.0;
pMap = &fMap;
}
fMap *= double(aFraction);
pMap = &fMap;
}
if ( rSdrObjCustomShape.getSdrModelFromSdrObject().GetScaleUnit() != MapUnit::Map100thMM )
{
DBG_ASSERT( rSdrObjCustomShape.getSdrModelFromSdrObject().GetScaleUnit() == MapUnit::MapTwip, "EnhancedCustomShape3d::Current MapMode is Unsupported" );
fMap *= 1440.0 / 2540.0;
pMap = &fMap;
}
if ( GetBool( rGeometryItem, "Extrusion", false ) )
{
bool bIsMirroredX(rSdrObjCustomShape.IsMirroredX());
@@ -326,7 +323,7 @@
a3DDefaultAttr.SetDefaultLatheCharacterMode( true );
a3DDefaultAttr.SetDefaultExtrudeCharacterMode( true );
E3dScene* pScene = new E3dScene;
E3dScene* pScene = new E3dScene(rSdrObjCustomShape.getSdrModelFromSdrObject());
bool bSceneHasObjects ( false );
bool bUseTwoFillStyles( false );
@@ -480,10 +477,15 @@
aBoundRect2d.Union( aBoundRect );
// #i122777# depth 0 is okay for planes when using double-sided
E3dCompoundObject* p3DObj = new E3dExtrudeObj( a3DDefaultAttr, aPolyPoly, bUseTwoFillStyles ? 0 : fDepth );
E3dCompoundObject* p3DObj = new E3dExtrudeObj(
rSdrObjCustomShape.getSdrModelFromSdrObject(),
a3DDefaultAttr,
aPolyPoly,
bUseTwoFillStyles ? 0 : fDepth );
p3DObj->NbcSetLayer( pShape2d->GetLayer() );
p3DObj->SetMergedItemSet( aLocalSet );
if ( bIsPlaceholderObject )
aPlaceholderObjectList.push_back( p3DObj );
else if ( bUseTwoFillStyles )
@@ -530,7 +532,11 @@
}
}
pScene->Insert3DObj( p3DObj );
p3DObj = new E3dExtrudeObj( a3DDefaultAttr, aPolyPoly, fDepth );
p3DObj = new E3dExtrudeObj(
rSdrObjCustomShape.getSdrModelFromSdrObject(),
a3DDefaultAttr,
aPolyPoly,
fDepth);
p3DObj->NbcSetLayer( pShape2d->GetLayer() );
p3DObj->SetMergedItemSet( aLocalSet );
if ( bUseExtrusionColor )
@@ -541,7 +547,11 @@
pScene->Insert3DObj( p3DObj );
// #i122777# depth 0 is okay for planes when using double-sided
p3DObj = new E3dExtrudeObj( a3DDefaultAttr, aPolyPoly, 0 );
p3DObj = new E3dExtrudeObj(
rSdrObjCustomShape.getSdrModelFromSdrObject(),
a3DDefaultAttr,
aPolyPoly,
0);
p3DObj->NbcSetLayer( pShape2d->GetLayer() );
p3DObj->SetMergedItemSet( aLocalSet );
diff --git a/svx/source/customshapes/EnhancedCustomShapeEngine.cxx b/svx/source/customshapes/EnhancedCustomShapeEngine.cxx
index 133c008..753d43c 100644
--- a/svx/source/customshapes/EnhancedCustomShapeEngine.cxx
+++ b/svx/source/customshapes/EnhancedCustomShapeEngine.cxx
@@ -167,7 +167,7 @@
if ( dynamic_cast<const SdrObjGroup*>( pRenderedShape) == nullptr )
{
SdrObject* pTmp = pRenderedShape;
pRenderedShape = new SdrObjGroup();
pRenderedShape = new SdrObjGroup(rSdrObjCustomShape.getSdrModelFromSdrObject());
static_cast<SdrObjGroup*>(pRenderedShape)->GetSubList()->NbcInsertObject( pTmp );
}
static_cast<SdrObjGroup*>(pRenderedShape)->GetSubList()->NbcInsertObject( pShadowGeometry->Clone(), 0 );
@@ -181,10 +181,9 @@
{
// #i37011# also create a text object and add at rPos + 1
SdrObject* pTextObj = SdrObjFactory::MakeNewObject(
rSdrObjCustomShape.getSdrModelFromSdrObject(),
rSdrObjCustomShape.GetObjInventor(),
OBJ_TEXT,
nullptr,
rSdrObjCustomShape.GetModel());
OBJ_TEXT);
// Copy text content
OutlinerParaObject* pParaObj(rSdrObjCustomShape.GetOutlinerParaObject());
@@ -233,7 +232,7 @@
if ( dynamic_cast<const SdrObjGroup*>( pRenderedShape) == nullptr )
{
SdrObject* pTmp = pRenderedShape;
pRenderedShape = new SdrObjGroup();
pRenderedShape = new SdrObjGroup(rSdrObjCustomShape.getSdrModelFromSdrObject());
static_cast<SdrObjGroup*>(pRenderedShape)->GetSubList()->NbcInsertObject( pTmp );
}
static_cast<SdrObjGroup*>(pRenderedShape)->GetSubList()->NbcInsertObject( pTextObj );
@@ -248,12 +247,11 @@
if ( dynamic_cast<const SdrObjGroup*>( pRenderedShape) == nullptr )
{
SdrObject* pTmp = pRenderedShape;
pRenderedShape = new SdrObjGroup();
pRenderedShape = new SdrObjGroup(rSdrObjCustomShape.getSdrModelFromSdrObject());
static_cast<SdrObjGroup*>(pRenderedShape)->GetSubList()->NbcInsertObject( pTmp );
}
pRenderedShape->SetPage(rSdrObjCustomShape.GetPage());
pRenderedShape->SetModel(rSdrObjCustomShape.GetModel());
}
}
@@ -391,9 +389,7 @@
SdrObjCustomShape& rSdrObjCustomShape(static_cast< SdrObjCustomShape& >(*GetSdrObjectFromXShape(mxShape)));
uno::Reference< document::XActionLockable > xLockable( mxShape, uno::UNO_QUERY );
if(rSdrObjCustomShape.GetModel()
&& xLockable.is()
&& !xLockable->isActionLocked())
if(xLockable.is() && !xLockable->isActionLocked())
{
EnhancedCustomShape2d aCustomShape2d(rSdrObjCustomShape);
tools::Rectangle aRect( aCustomShape2d.GetTextRect() );
diff --git a/svx/source/customshapes/EnhancedCustomShapeFontWork.cxx b/svx/source/customshapes/EnhancedCustomShapeFontWork.cxx
index 71dc441..9bfed5d 100644
--- a/svx/source/customshapes/EnhancedCustomShapeFontWork.cxx
+++ b/svx/source/customshapes/EnhancedCustomShapeFontWork.cxx
@@ -853,13 +853,17 @@
++aTextAreaIter;
}
pRet = new SdrPathObj( OBJ_POLY, aPolyPoly );
pRet = new SdrPathObj(
rSdrObjCustomShape.getSdrModelFromSdrObject(),
OBJ_POLY,
aPolyPoly);
SfxItemSet aSet(rSdrObjCustomShape.GetMergedItemSet());
aSet.ClearItem( SDRATTR_TEXTDIRECTION ); //SJ: vertical writing is not required, by removing this item no outliner is created
aSet.Put(makeSdrShadowItem(false)); // #i37011# NO shadow for FontWork geometry
pRet->SetMergedItemSet( aSet ); // * otherwise we would crash, because the outliner tries to create a Paraobject, but there is no model
}
return pRet;
}
diff --git a/svx/source/dialog/connctrl.cxx b/svx/source/dialog/connctrl.cxx
index b9a8ea7..9440ce67 100644
--- a/svx/source/dialog/connctrl.cxx
+++ b/svx/source/dialog/connctrl.cxx
@@ -39,7 +39,7 @@
SvxXConnectionPreview::SvxXConnectionPreview( vcl::Window* pParent, WinBits nStyle)
: Control(pParent, nStyle)
, pEdgeObj(nullptr)
, pObjList(nullptr)
, pSdrPage(nullptr)
, pView(nullptr)
{
SetMapMode(MapMode(MapUnit::Map100thMM));
@@ -55,7 +55,7 @@
void SvxXConnectionPreview::dispose()
{
delete pObjList;
delete pSdrPage;
Control::dispose();
}
@@ -76,13 +76,13 @@
void SvxXConnectionPreview::AdaptSize()
{
// Adapt size
if( !pObjList )
if( !pSdrPage )
return;
SetMapMode(MapMode(MapUnit::Map100thMM));
OutputDevice* pOD = pView->GetFirstOutputDevice(); // GetWin( 0 );
tools::Rectangle aRect = pObjList->GetAllObjBoundRect();
tools::Rectangle aRect = pSdrPage->GetAllObjBoundRect();
MapMode aMapMode = GetMapMode();
aMapMode.SetMapUnit( pOD->GetMapMode().GetMapUnit() );
@@ -171,37 +171,43 @@
// potential memory leak here (!). Create SdrObjList only when there is
// not yet one.
if(!pObjList)
if(!pSdrPage)
{
pObjList = new SdrObjList( pView->GetModel(), nullptr );
pSdrPage = new SdrPage(
pView->getSdrModelFromSdrView(),
false);
}
if( pTmpObj1 )
{
SdrObject* pObj1 = pTmpObj1->Clone();
pObjList->InsertObject( pObj1 );
pSdrPage->InsertObject( pObj1 );
pEdgeObj->ConnectToNode( true, pObj1 );
}
if( pTmpObj2 )
{
SdrObject* pObj2 = pTmpObj2->Clone();
pObjList->InsertObject( pObj2 );
pSdrPage->InsertObject( pObj2 );
pEdgeObj->ConnectToNode( false, pObj2 );
}
pObjList->InsertObject( pEdgeObj );
pSdrPage->InsertObject( pEdgeObj );
}
}
}
if( !pEdgeObj )
pEdgeObj = new SdrEdgeObj();
{
pEdgeObj = new SdrEdgeObj(pView->getSdrModelFromSdrView());
}
AdaptSize();
}
void SvxXConnectionPreview::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle&)
{
if (pObjList)
if (pSdrPage)
{
// This will not work anymore. To not start at Adam and Eve, i will
// ATM not try to change all this stuff to really using an own model
@@ -212,9 +218,9 @@
// New stuff: Use a ObjectContactOfObjListPainter.
sdr::contact::SdrObjectVector aObjectVector;
for (size_t a = 0; a < pObjList->GetObjCount(); ++a)
for (size_t a = 0; a < pSdrPage->GetObjCount(); ++a)
{
SdrObject* pObject = pObjList->GetObj(a);
SdrObject* pObject = pSdrPage->GetObj(a);
DBG_ASSERT(pObject,
"SvxXConnectionPreview::Paint: Corrupt ObjectList (!)");
aObjectVector.push_back(pObject);
diff --git a/svx/source/dialog/contwnd.cxx b/svx/source/dialog/contwnd.cxx
index e404154..c041a72 100644
--- a/svx/source/dialog/contwnd.cxx
+++ b/svx/source/dialog/contwnd.cxx
@@ -61,7 +61,10 @@
{
basegfx::B2DPolyPolygon aPolyPolygon;
aPolyPolygon.append(aPolyPoly[ i ].getB2DPolygon());
SdrPathObj* pPathObj = new SdrPathObj( OBJ_PATHFILL, aPolyPolygon );
SdrPathObj* pPathObj = new SdrPathObj(
*pModel,
OBJ_PATHFILL,
aPolyPolygon);
SfxItemSet aSet(pModel->GetItemPool());
diff --git a/svx/source/dialog/dlgctl3d.cxx b/svx/source/dialog/dlgctl3d.cxx
index 0eee458..22bb53b 100644
--- a/svx/source/dialog/dlgctl3d.cxx
+++ b/svx/source/dialog/dlgctl3d.cxx
@@ -92,12 +92,12 @@
mpModel->InsertPage( mpFmPage, 0 );
// 3D View
mp3DView = new E3dView( mpModel, this );
mp3DView = new E3dView(*mpModel, this );
mp3DView->SetBufferedOutputAllowed(true);
mp3DView->SetBufferedOverlayAllowed(true);
// 3D Scene
mpScene = new E3dScene;
mpScene = new E3dScene(*mpModel);
// initially create object
SetObjectType(SvxPreviewObjectType::SPHERE);
@@ -204,6 +204,7 @@
case SvxPreviewObjectType::SPHERE:
{
mp3DObj = new E3dSphereObj(
*mpModel,
mp3DView->Get3DDefaultAttributes(),
basegfx::B3DPoint( 0, 0, 0 ),
basegfx::B3DVector( 5000, 5000, 5000 ));
@@ -213,6 +214,7 @@
case SvxPreviewObjectType::CUBE:
{
mp3DObj = new E3dCubeObj(
*mpModel,
mp3DView->Get3DDefaultAttributes(),
basegfx::B3DPoint( -2500, -2500, -2500 ),
basegfx::B3DVector( 5000, 5000, 5000 ));
@@ -286,6 +288,7 @@
// create invisible expansion object
const double fMaxExpansion(RADIUS_LAMP_BIG + RADIUS_LAMP_PREVIEW_SIZE);
mpExpansionObject = new E3dCubeObj(
*mpModel,
mp3DView->Get3DDefaultAttributes(),
basegfx::B3DPoint(-fMaxExpansion, -fMaxExpansion, -fMaxExpansion),
basegfx::B3DVector(2.0 * fMaxExpansion, 2.0 * fMaxExpansion, 2.0 * fMaxExpansion));
@@ -309,6 +312,7 @@
// create object for it
mpLampBottomObject = new E3dPolygonObj(
*mpModel,
basegfx::B3DPolyPolygon(a3DCircle));
mpScene->Insert3DObj( mpLampBottomObject );
@@ -322,6 +326,7 @@
// create object for it
mpLampShaftObject = new E3dPolygonObj(
*mpModel,
basegfx::B3DPolyPolygon(a3DHalfCircle));
mpScene->Insert3DObj( mpLampShaftObject );
@@ -383,6 +388,7 @@
const double fLampSize(bIsSelectedLight ? RADIUS_LAMP_BIG : RADIUS_LAMP_SMALL);
E3dObject* pNewLight = new E3dSphereObj(
*mpModel,
mp3DView->Get3DDefaultAttributes(),
basegfx::B3DPoint( 0, 0, 0 ),
basegfx::B3DVector( fLampSize, fLampSize, fLampSize));
diff --git a/svx/source/dialog/dlgctrl.cxx b/svx/source/dialog/dlgctrl.cxx
index d89b71b..7e2ffb67 100644
--- a/svx/source/dialog/dlgctrl.cxx
+++ b/svx/source/dialog/dlgctrl.cxx
@@ -1468,14 +1468,9 @@
{
InitSettings( true, true );
mpLineObjA = new SdrPathObj(OBJ_LINE);
mpLineObjA->SetModel(&getModel());
mpLineObjB = new SdrPathObj(OBJ_PLIN);
mpLineObjB->SetModel(&getModel());
mpLineObjC = new SdrPathObj(OBJ_PLIN);
mpLineObjC->SetModel(&getModel());
mpLineObjA = new SdrPathObj(getModel(), OBJ_LINE);
mpLineObjB = new SdrPathObj(getModel(), OBJ_PLIN);
mpLineObjC = new SdrPathObj(getModel(), OBJ_PLIN);
}
VCL_BUILDER_FACTORY(SvxXLinePreview)
@@ -1563,15 +1558,16 @@
}
SvxXRectPreview::SvxXRectPreview(vcl::Window* pParent)
: SvxPreviewBase(pParent)
, mpRectangleObject(nullptr)
: SvxPreviewBase(pParent)
,mpRectangleObject(nullptr)
{
InitSettings(true, true);
// create RectangleObject
const tools::Rectangle aObjectSize(Point(), GetOutputSize());
mpRectangleObject = new SdrRectObj(aObjectSize);
mpRectangleObject->SetModel(&getModel());
mpRectangleObject = new SdrRectObj(
getModel(),
aObjectSize);
}
void SvxXRectPreview::Resize()
@@ -1580,8 +1576,9 @@
SdrObject *pOrigObject = mpRectangleObject;
if (pOrigObject)
{
mpRectangleObject = new SdrRectObj(aObjectSize);
mpRectangleObject->SetModel(&getModel());
mpRectangleObject = new SdrRectObj(
getModel(),
aObjectSize);
SetAttributes(pOrigObject->GetMergedItemSet());
SdrObject::Free(pOrigObject);
}
@@ -1637,13 +1634,15 @@
// create RectangleObject
const tools::Rectangle aObjectSize( Point( aSize.Width(), aSize.Height() ), aSize );
mpRectangleObject = new SdrRectObj(aObjectSize);
mpRectangleObject->SetModel(&getModel());
mpRectangleObject = new SdrRectObj(
getModel(),
aObjectSize);
// create ShadowObject
const tools::Rectangle aShadowSize( Point( aSize.Width(), aSize.Height() ), aSize );
mpRectangleShadow = new SdrRectObj(aShadowSize);
mpRectangleShadow->SetModel(&getModel());
mpRectangleShadow = new SdrRectObj(
getModel(),
aShadowSize);
}
VCL_BUILDER_FACTORY(SvxXShadowPreview)
diff --git a/svx/source/dialog/graphctl.cxx b/svx/source/dialog/graphctl.cxx
index 481c55c..07ff51e 100644
--- a/svx/source/dialog/graphctl.cxx
+++ b/svx/source/dialog/graphctl.cxx
@@ -142,7 +142,7 @@
pModel->SetChanged( false );
// Creating a View
pView = new GraphCtrlView( pModel, this );
pView = new GraphCtrlView(*pModel, this);
pView->SetWorkArea( tools::Rectangle( Point(), aGraphSize ) );
pView->EnableExtendedMouseEventDispatcher( true );
pView->ShowSdrPage(pView->GetModel()->GetPage(0));
diff --git a/svx/source/dialog/imapwnd.cxx b/svx/source/dialog/imapwnd.cxx
index da1a22a..557bbb0 100644
--- a/svx/source/dialog/imapwnd.cxx
+++ b/svx/source/dialog/imapwnd.cxx
@@ -195,7 +195,10 @@
// clipped on CanvasPane
aDrawRect.Intersection( aClipRect );
pSdrObj = static_cast<SdrObject*>(new SdrRectObj( aDrawRect ));
pSdrObj = static_cast<SdrObject*>(
new SdrRectObj(
*pModel,
aDrawRect));
pCloneIMapObj.reset(static_cast<IMapObject*>(new IMapRectangleObject( *pIMapRectObj )));
}
break;
@@ -211,7 +214,13 @@
// limited to CanvasPane
aCircle.Intersection( aClipRect );
pSdrObj = static_cast<SdrObject*>(new SdrCircObj( OBJ_CIRC, aCircle, 0, 36000 ));
pSdrObj = static_cast<SdrObject*>(
new SdrCircObj(
*pModel,
OBJ_CIRC,
aCircle,
0,
36000));
pCloneIMapObj.reset(static_cast<IMapObject*>(new IMapCircleObject( *pIMapCircleObj )));
}
break;
@@ -228,7 +237,13 @@
// clipped on CanvasPane
aDrawRect.Intersection( aClipRect );
pSdrObj = static_cast<SdrObject*>(new SdrCircObj( OBJ_CIRC, aDrawRect, 0, 36000 ));
pSdrObj = static_cast<SdrObject*>(
new SdrCircObj(
*pModel,
OBJ_CIRC,
aDrawRect,
0,
36000));
}
else
{
@@ -240,7 +255,11 @@
basegfx::B2DPolygon aPolygon;
aPolygon.append(aDrawPoly.getB2DPolygon());
pSdrObj = static_cast<SdrObject*>(new SdrPathObj(OBJ_POLY, basegfx::B2DPolyPolygon(aPolygon)));
pSdrObj = static_cast<SdrObject*>(
new SdrPathObj(
*pModel,
OBJ_POLY,
basegfx::B2DPolyPolygon(aPolygon)));
}
pCloneIMapObj.reset(static_cast<IMapObject*>(new IMapPolygonObject( *pIMapPolyObj )));
@@ -745,7 +764,10 @@
aPagePos.AdjustY((aPageSize.Height() / 2) - (nDefaultObjectSizeHeight / 2) );
tools::Rectangle aNewObjectRectangle(aPagePos, Size(nDefaultObjectSizeWidth, nDefaultObjectSizeHeight));
SdrObject* pObj = SdrObjFactory::MakeNewObject( pView->GetCurrentObjInventor(), pView->GetCurrentObjIdentifier(), nullptr, pModel);
SdrObject* pObj = SdrObjFactory::MakeNewObject(
*pModel,
pView->GetCurrentObjInventor(),
pView->GetCurrentObjIdentifier());
pObj->SetLogicRect(aNewObjectRectangle);
switch( pObj->GetObjIdentifier() )
diff --git a/svx/source/dialog/measctrl.cxx b/svx/source/dialog/measctrl.cxx
index ddca770..03e6300 100644
--- a/svx/source/dialog/measctrl.cxx
+++ b/svx/source/dialog/measctrl.cxx
@@ -42,9 +42,11 @@
Point aPt1 = Point(aSize.Width() / 5, static_cast<long>(aSize.Height() / 2));
Point aPt2 = Point(aSize.Width() * 4 / 5, static_cast<long>(aSize.Height() / 2));
pMeasureObj = new SdrMeasureObj(aPt1, aPt2);
pModel = new SdrModel();
pMeasureObj->SetModel(pModel);
pMeasureObj = new SdrMeasureObj(
*pModel,
aPt1,
aPt2);
bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode();
SetDrawMode(bHighContrast ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR);
diff --git a/svx/source/engine3d/cube3d.cxx b/svx/source/engine3d/cube3d.cxx
index 6583969..509688fe 100644
--- a/svx/source/engine3d/cube3d.cxx
+++ b/svx/source/engine3d/cube3d.cxx
@@ -35,25 +35,31 @@
}
E3dCubeObj::E3dCubeObj(E3dDefaultAttributes& rDefault, const basegfx::B3DPoint& aPos, const basegfx::B3DVector& r3DSize)
: E3dCompoundObject()
E3dCubeObj::E3dCubeObj(
SdrModel& rSdrModel,
const E3dDefaultAttributes& rDefault,
const basegfx::B3DPoint& aPos,
const basegfx::B3DVector& r3DSize)
: E3dCompoundObject(rSdrModel)
{
// Set Defaults
SetDefaultAttributes(rDefault);
aCubePos = aPos; // position centre or left, bottom, back (dependent on bPosIsCenter)
// position centre or left, bottom, back (dependent on bPosIsCenter)
aCubePos = aPos;
aCubeSize = r3DSize;
}
E3dCubeObj::E3dCubeObj()
: E3dCompoundObject()
E3dCubeObj::E3dCubeObj(SdrModel& rSdrModel)
: E3dCompoundObject(rSdrModel)
{
// Set Defaults
E3dDefaultAttributes aDefault;
const E3dDefaultAttributes aDefault;
SetDefaultAttributes(aDefault);
}
void E3dCubeObj::SetDefaultAttributes(E3dDefaultAttributes& rDefault)
void E3dCubeObj::SetDefaultAttributes(const E3dDefaultAttributes& rDefault)
{
aCubePos = rDefault.GetDefaultCubePos();
aCubeSize = rDefault.GetDefaultCubeSize();
@@ -72,9 +78,22 @@
return nullptr;
}
E3dCubeObj* E3dCubeObj::Clone() const
E3dCubeObj* E3dCubeObj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< E3dCubeObj >();
return CloneHelper< E3dCubeObj >(pTargetModel);
}
E3dCubeObj& E3dCubeObj::operator=(const E3dCubeObj& rObj)
{
if( this == &rObj )
return *this;
E3dCompoundObject::operator=(rObj);
aCubePos = rObj.aCubePos;
aCubeSize = rObj.aCubeSize;
bPosIsCenter = rObj.bPosIsCenter;
return *this;
}
// Set local parameters with geometry re-creating
diff --git a/svx/source/engine3d/dragmt3d.cxx b/svx/source/engine3d/dragmt3d.cxx
index e55931b..5e070ab 100644
--- a/svx/source/engine3d/dragmt3d.cxx
+++ b/svx/source/engine3d/dragmt3d.cxx
@@ -73,8 +73,7 @@
if(pE3dObj)
{
// fill new interaction unit
E3dDragMethodUnit aNewUnit;
aNewUnit.mp3DObj = pE3dObj;
E3dDragMethodUnit aNewUnit(*pE3dObj);
// get transformations
aNewUnit.maInitTransform = aNewUnit.maTransform = pE3dObj->GetTransform();
@@ -157,13 +156,15 @@
for(nOb=0;nOb<nCnt;nOb++)
{
E3dDragMethodUnit& rCandidate = maGrp[nOb];
E3DModifySceneSnapRectUpdater aUpdater(rCandidate.mp3DObj);
rCandidate.mp3DObj->SetTransform(rCandidate.maTransform);
E3DModifySceneSnapRectUpdater aUpdater(&rCandidate.mr3DObj);
rCandidate.mr3DObj.SetTransform(rCandidate.maTransform);
if( bUndo )
{
getSdrDragView().AddUndo(new E3dRotateUndoAction(rCandidate.mp3DObj->GetModel(),
rCandidate.mp3DObj, rCandidate.maInitTransform,
rCandidate.maTransform));
getSdrDragView().AddUndo(
new E3dRotateUndoAction(
rCandidate.mr3DObj,
rCandidate.maInitTransform,
rCandidate.maTransform));
}
}
if( bUndo )
@@ -185,8 +186,8 @@
{
// Restore transformation
E3dDragMethodUnit& rCandidate = maGrp[nOb];
E3DModifySceneSnapRectUpdater aUpdater(rCandidate.mp3DObj);
rCandidate.mp3DObj->SetTransform(rCandidate.maInitTransform);
E3DModifySceneSnapRectUpdater aUpdater(&rCandidate.mr3DObj);
rCandidate.mr3DObj.SetTransform(rCandidate.maInitTransform);
}
}
}
@@ -224,7 +225,7 @@
if(nPlyCnt)
{
const sdr::contact::ViewContactOfE3dScene& rVCScene = static_cast< sdr::contact::ViewContactOfE3dScene& >(rCandidate.mp3DObj->GetScene()->GetViewContact());
const sdr::contact::ViewContactOfE3dScene& rVCScene = static_cast< sdr::contact::ViewContactOfE3dScene& >(rCandidate.mr3DObj.GetScene()->GetViewContact());
const drawinglayer::geometry::ViewInformation3D& aViewInfo3D(rVCScene.getViewInformation3D());
const basegfx::B3DHomMatrix aWorldToView(aViewInfo3D.getDeviceToView() * aViewInfo3D.getProjection() * aViewInfo3D.getOrientation());
const basegfx::B3DHomMatrix aTransform(aWorldToView * rCandidate.maDisplayTransform);
@@ -261,7 +262,7 @@
if(nCnt)
{
const E3dScene *pScene = maGrp[0].mp3DObj->GetScene();
const E3dScene *pScene = maGrp[0].mr3DObj.GetScene();
if(pScene)
{
@@ -271,7 +272,7 @@
for(sal_uInt32 nOb(0); nOb < nCnt; nOb++)
{
E3dDragMethodUnit& rCandidate = maGrp[nOb];
basegfx::B3DPoint aObjCenter = rCandidate.mp3DObj->GetBoundVolume().getCenter();
basegfx::B3DPoint aObjCenter = rCandidate.mr3DObj.GetBoundVolume().getCenter();
const basegfx::B3DHomMatrix aTransform(aViewInfo3D.getOrientation() * rCandidate.maDisplayTransform * rCandidate.maInitTransform);
aObjCenter = aTransform * aObjCenter;
@@ -387,7 +388,7 @@
}
// Transformation in eye coordinates, there rotate then and back
const sdr::contact::ViewContactOfE3dScene& rVCScene = static_cast< sdr::contact::ViewContactOfE3dScene& >(rCandidate.mp3DObj->GetScene()->GetViewContact());
const sdr::contact::ViewContactOfE3dScene& rVCScene = static_cast< sdr::contact::ViewContactOfE3dScene& >(rCandidate.mr3DObj.GetScene()->GetViewContact());
const drawinglayer::geometry::ViewInformation3D& aViewInfo3D(rVCScene.getViewInformation3D());
basegfx::B3DHomMatrix aInverseOrientation(aViewInfo3D.getOrientation());
aInverseOrientation.invert();
@@ -405,8 +406,8 @@
if(mbMoveFull)
{
E3DModifySceneSnapRectUpdater aUpdater(rCandidate.mp3DObj);
rCandidate.mp3DObj->SetTransform(rCandidate.maTransform);
E3DModifySceneSnapRectUpdater aUpdater(&rCandidate.mr3DObj);
rCandidate.mr3DObj.SetTransform(rCandidate.maTransform);
}
else
{
@@ -504,7 +505,7 @@
for(sal_uInt32 nOb(0); nOb < nCnt; nOb++)
{
E3dDragMethodUnit& rCandidate = maGrp[nOb];
const sdr::contact::ViewContactOfE3dScene& rVCScene = static_cast< sdr::contact::ViewContactOfE3dScene& >(rCandidate.mp3DObj->GetScene()->GetViewContact());
const sdr::contact::ViewContactOfE3dScene& rVCScene = static_cast< sdr::contact::ViewContactOfE3dScene& >(rCandidate.mr3DObj.GetScene()->GetViewContact());
const drawinglayer::geometry::ViewInformation3D& aViewInfo3D(rVCScene.getViewInformation3D());
// move coor from 2d world to 3d Eye
@@ -554,8 +555,8 @@
if(mbMoveFull)
{
E3DModifySceneSnapRectUpdater aUpdater(rCandidate.mp3DObj);
rCandidate.mp3DObj->SetTransform(rCandidate.maTransform);
E3DModifySceneSnapRectUpdater aUpdater(&rCandidate.mr3DObj);
rCandidate.mr3DObj.SetTransform(rCandidate.maTransform);
}
else
{
@@ -575,10 +576,10 @@
for(sal_uInt32 nOb(0); nOb < nCnt; nOb++)
{
E3dDragMethodUnit& rCandidate = maGrp[nOb];
const basegfx::B3DPoint aObjectCenter(rCandidate.mp3DObj->GetBoundVolume().getCenter());
const basegfx::B3DPoint aObjectCenter(rCandidate.mr3DObj.GetBoundVolume().getCenter());
// transform from 2D world view to 3D eye
const sdr::contact::ViewContactOfE3dScene& rVCScene = static_cast< sdr::contact::ViewContactOfE3dScene& >(rCandidate.mp3DObj->GetScene()->GetViewContact());
const sdr::contact::ViewContactOfE3dScene& rVCScene = static_cast< sdr::contact::ViewContactOfE3dScene& >(rCandidate.mr3DObj.GetScene()->GetViewContact());
const drawinglayer::geometry::ViewInformation3D& aViewInfo3D(rVCScene.getViewInformation3D());
basegfx::B2DPoint aGlobalScaleStart2D(static_cast<double>(aStartPos.X()), static_cast<double>(aStartPos.Y()));
@@ -673,14 +674,14 @@
if(mbMoveFull)
{
E3DModifySceneSnapRectUpdater aUpdater(rCandidate.mp3DObj);
rCandidate.mp3DObj->SetTransform(rCandidate.maTransform);
E3DModifySceneSnapRectUpdater aUpdater(&rCandidate.mr3DObj);
rCandidate.mr3DObj.SetTransform(rCandidate.maTransform);
}
else
{
Hide();
rCandidate.maWireframePoly.clear();
rCandidate.maWireframePoly = rCandidate.mp3DObj->CreateWireframe();
rCandidate.maWireframePoly = rCandidate.mr3DObj.CreateWireframe();
rCandidate.maWireframePoly.transform(rCandidate.maTransform);
Show();
}
diff --git a/svx/source/engine3d/e3dsceneupdater.cxx b/svx/source/engine3d/e3dsceneupdater.cxx
index bc696da..28c4727 100644
--- a/svx/source/engine3d/e3dsceneupdater.cxx
+++ b/svx/source/engine3d/e3dsceneupdater.cxx
@@ -29,30 +29,27 @@
mpViewInformation3D(nullptr)
{
// Secure old 3D transformation stack before modification
if(pObject)
if(const E3dObject* pE3dObject = dynamic_cast< const E3dObject* >(pObject))
{
const E3dObject* pE3dObject = dynamic_cast< const E3dObject* >(pObject);
mpScene = pE3dObject->GetScene();
if(pE3dObject)
if(mpScene && mpScene->GetScene() == mpScene)
{
mpScene = pE3dObject->GetScene();
// if there is a scene and it's the outmost scene, get current 3D range
const sdr::contact::ViewContactOfE3dScene& rVCScene = static_cast< sdr::contact::ViewContactOfE3dScene& >(mpScene->GetViewContact());
const basegfx::B3DRange aAllContentRange(rVCScene.getAllContentRange3D());
if(mpScene && mpScene->GetScene() == mpScene)
if(aAllContentRange.isEmpty())
{
// if there is a scene and it's the outmost scene, get current 3D range
const sdr::contact::ViewContactOfE3dScene& rVCScene = static_cast< sdr::contact::ViewContactOfE3dScene& >(mpScene->GetViewContact());
const basegfx::B3DRange aAllContentRange(rVCScene.getAllContentRange3D());
if(aAllContentRange.isEmpty())
{
// no content, nothing to do
mpScene = nullptr;
}
else
{
// secure current 3D transformation stack
mpViewInformation3D.reset( new drawinglayer::geometry::ViewInformation3D(rVCScene.getViewInformation3D(aAllContentRange)) );
}
// no content, nothing to do
mpScene = nullptr;
}
else
{
// secure current 3D transformation stack
mpViewInformation3D.reset(
new drawinglayer::geometry::ViewInformation3D(
rVCScene.getViewInformation3D(aAllContentRange)));
}
}
}
diff --git a/svx/source/engine3d/e3dundo.cxx b/svx/source/engine3d/e3dundo.cxx
index e194dd6..47268fc 100644
--- a/svx/source/engine3d/e3dundo.cxx
+++ b/svx/source/engine3d/e3dundo.cxx
@@ -38,36 +38,32 @@
// Undo destructor for 3D-Rotation
E3dRotateUndoAction::~E3dRotateUndoAction ()
E3dRotateUndoAction::~E3dRotateUndoAction()
{
}
// Undo for 3D-Rotation on the Rotation matrix
void E3dRotateUndoAction::Undo ()
void E3dRotateUndoAction::Undo()
{
E3DModifySceneSnapRectUpdater aUpdater(pMy3DObj);
pMy3DObj->SetTransform(aMyOldRotation);
E3DModifySceneSnapRectUpdater aUpdater(&mrMy3DObj);
mrMy3DObj.SetTransform(maMyOldRotation);
}
// Redo for 3D-Rotation on the Rotation matrix
void E3dRotateUndoAction::Redo ()
void E3dRotateUndoAction::Redo()
{
E3DModifySceneSnapRectUpdater aUpdater(pMy3DObj);
pMy3DObj->SetTransform(aMyNewRotation);
E3DModifySceneSnapRectUpdater aUpdater(&mrMy3DObj);
mrMy3DObj.SetTransform(maMyNewRotation);
}
E3dAttributesUndoAction::E3dAttributesUndoAction( SdrModel &rModel,
E3dObject* pInObject,
const SfxItemSet& rNewSet,
const SfxItemSet& rOldSet)
: SdrUndoAction( rModel )
, pObject ( pInObject )
, aNewSet ( rNewSet )
, aOldSet ( rOldSet )
E3dAttributesUndoAction::E3dAttributesUndoAction(
E3dObject& rInObject,
const SfxItemSet& rNewSet,
const SfxItemSet& rOldSet)
: SdrUndoAction(rInObject.getSdrModelFromSdrObject())
,mrObject(rInObject)
,maNewSet(rNewSet)
,maOldSet(rOldSet)
{
}
@@ -80,18 +76,17 @@
void E3dAttributesUndoAction::Undo()
{
E3DModifySceneSnapRectUpdater aUpdater(pObject);
pObject->SetMergedItemSetAndBroadcast(aOldSet);
E3DModifySceneSnapRectUpdater aUpdater(&mrObject);
mrObject.SetMergedItemSetAndBroadcast(maOldSet);
}
void E3dAttributesUndoAction::Redo()
{
E3DModifySceneSnapRectUpdater aUpdater(pObject);
pObject->SetMergedItemSetAndBroadcast(aNewSet);
E3DModifySceneSnapRectUpdater aUpdater(&mrObject);
mrObject.SetMergedItemSetAndBroadcast(maNewSet);
}
// Multiple Undo is not possible
bool E3dAttributesUndoAction::CanRepeat(SfxRepeatTarget& /*rView*/) const
{
return false;
diff --git a/svx/source/engine3d/extrud3d.cxx b/svx/source/engine3d/extrud3d.cxx
index 3b3bb93..0a92997 100644
--- a/svx/source/engine3d/extrud3d.cxx
+++ b/svx/source/engine3d/extrud3d.cxx
@@ -39,24 +39,24 @@
// DrawContact section
sdr::contact::ViewContact* E3dExtrudeObj::CreateObjectSpecificViewContact()
{
return new sdr::contact::ViewContactOfE3dExtrude(*this);
}
sdr::properties::BaseProperties* E3dExtrudeObj::CreateObjectSpecificProperties()
{
return new sdr::properties::E3dExtrudeProperties(*this);
}
// Constructor creates a two cover surface tools::PolyPolygon and (point-count 1) side
// surfaces rectangles from the passed PolyPolygon
E3dExtrudeObj::E3dExtrudeObj(E3dDefaultAttributes const & rDefault, const basegfx::B2DPolyPolygon& rPP, double fDepth)
: E3dCompoundObject(),
E3dExtrudeObj::E3dExtrudeObj(
SdrModel& rSdrModel,
const E3dDefaultAttributes& rDefault,
const basegfx::B2DPolyPolygon& rPP,
double fDepth)
: E3dCompoundObject(rSdrModel),
maExtrudePolygon(rPP)
{
// since the old class PolyPolygon3D did mirror the given PolyPolygons in Y, do the same here
@@ -71,15 +71,16 @@
GetProperties().SetObjectItemDirect(makeSvx3DDepthItem(static_cast<sal_uInt32>(fDepth + 0.5)));
}
E3dExtrudeObj::E3dExtrudeObj()
: E3dCompoundObject()
E3dExtrudeObj::E3dExtrudeObj(SdrModel& rSdrModel)
: E3dCompoundObject(rSdrModel)
{
// Set Defaults
E3dDefaultAttributes aDefault;
const E3dDefaultAttributes aDefault;
SetDefaultAttributes(aDefault);
}
void E3dExtrudeObj::SetDefaultAttributes(E3dDefaultAttributes const & rDefault)
void E3dExtrudeObj::SetDefaultAttributes(const E3dDefaultAttributes& rDefault)
{
GetProperties().SetObjectItemDirect(Svx3DSmoothNormalsItem(rDefault.GetDefaultExtrudeSmoothed()));
GetProperties().SetObjectItemDirect(Svx3DSmoothLidsItem(rDefault.GetDefaultExtrudeSmoothFrontBack()));
@@ -97,11 +98,21 @@
return E3D_EXTRUDEOBJ_ID;
}
E3dExtrudeObj* E3dExtrudeObj::Clone() const
E3dExtrudeObj* E3dExtrudeObj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< E3dExtrudeObj >();
return CloneHelper< E3dExtrudeObj >(pTargetModel);
}
E3dExtrudeObj& E3dExtrudeObj::operator=(const E3dExtrudeObj& rObj)
{
if( this == &rObj )
return *this;
E3dCompoundObject::operator=(rObj);
maExtrudePolygon = rObj.maExtrudePolygon;
return *this;
}
// Set local parameters with geometry re-creating
@@ -194,7 +205,7 @@
{
// create PathObj
basegfx::B2DPolyPolygon aPoly = TransformToScreenCoor(aBackSide);
SdrPathObj* pPathObj = new SdrPathObj(OBJ_PLIN, aPoly);
SdrPathObj* pPathObj = new SdrPathObj(getSdrModelFromSdrObject(), OBJ_PLIN, aPoly);
SfxItemSet aSet(GetObjectItemSet());
aSet.Put(XLineStyleItem(css::drawing::LineStyle_SOLID));
diff --git a/svx/source/engine3d/lathe3d.cxx b/svx/source/engine3d/lathe3d.cxx
index 99268c6..74097eb 100644
--- a/svx/source/engine3d/lathe3d.cxx
+++ b/svx/source/engine3d/lathe3d.cxx
@@ -37,23 +37,22 @@
// DrawContact section
sdr::contact::ViewContact* E3dLatheObj::CreateObjectSpecificViewContact()
{
return new sdr::contact::ViewContactOfE3dLathe(*this);
}
sdr::properties::BaseProperties* E3dLatheObj::CreateObjectSpecificProperties()
{
return new sdr::properties::E3dLatheProperties(*this);
}
// Constructor from 3D polygon, scale is the conversion factor for the coordinates
E3dLatheObj::E3dLatheObj(E3dDefaultAttributes const & rDefault, const basegfx::B2DPolyPolygon& rPoly2D)
: E3dCompoundObject(),
E3dLatheObj::E3dLatheObj(
SdrModel& rSdrModel,
const E3dDefaultAttributes& rDefault,
const basegfx::B2DPolyPolygon& rPoly2D)
: E3dCompoundObject(rSdrModel),
maPolyPoly2D(rPoly2D)
{
// since the old class PolyPolygon3D did mirror the given PolyPolygons in Y, do the same here
@@ -82,15 +81,16 @@
}
}
E3dLatheObj::E3dLatheObj()
: E3dCompoundObject()
E3dLatheObj::E3dLatheObj(SdrModel& rSdrModel)
: E3dCompoundObject(rSdrModel)
{
// Set Defaults
E3dDefaultAttributes aDefault;
const E3dDefaultAttributes aDefault;
SetDefaultAttributes(aDefault);
}
void E3dLatheObj::SetDefaultAttributes(E3dDefaultAttributes const & rDefault)
void E3dLatheObj::SetDefaultAttributes(const E3dDefaultAttributes& rDefault)
{
GetProperties().SetObjectItemDirect(Svx3DSmoothNormalsItem(rDefault.GetDefaultLatheSmoothed()));
GetProperties().SetObjectItemDirect(Svx3DSmoothLidsItem(rDefault.GetDefaultLatheSmoothFrontBack()));
@@ -104,9 +104,20 @@
return E3D_LATHEOBJ_ID;
}
E3dLatheObj* E3dLatheObj::Clone() const
E3dLatheObj* E3dLatheObj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< E3dLatheObj >();
return CloneHelper< E3dLatheObj >(pTargetModel);
}
E3dLatheObj& E3dLatheObj::operator=(const E3dLatheObj& rObj)
{
if( this == &rObj )
return *this;
E3dCompoundObject::operator=(rObj);
maPolyPoly2D = rObj.maPolyPoly2D;
return *this;
}
// Convert the object to group object consisting of n polygons
@@ -176,7 +187,7 @@
// create PathObj
basegfx::B3DPolyPolygon aLathePoly3D(basegfx::utils::createB3DPolyPolygonFromB2DPolyPolygon(maPolyPoly2D));
basegfx::B2DPolyPolygon aTransPoly(TransformToScreenCoor(aLathePoly3D));
SdrPathObj* pPathObj = new SdrPathObj(OBJ_PLIN, aTransPoly);
SdrPathObj* pPathObj = new SdrPathObj(getSdrModelFromSdrObject(), OBJ_PLIN, aTransPoly);
// Set Attribute
SfxItemSet aSet(GetObjectItemSet());
diff --git a/svx/source/engine3d/obj3d.cxx b/svx/source/engine3d/obj3d.cxx
index 73a0675..959ecf1 100644
--- a/svx/source/engine3d/obj3d.cxx
+++ b/svx/source/engine3d/obj3d.cxx
@@ -81,16 +81,16 @@
// List for 3D-Objects
E3dObjList::E3dObjList()
: SdrObjList(nullptr, nullptr)
: SdrObjList(nullptr)
{
}
E3dObjList::E3dObjList(const E3dObjList&)
: SdrObjList()
E3dObjList* E3dObjList::CloneSdrObjList(SdrModel* pNewModel) const
{
E3dObjList* pObjList = new E3dObjList();
pObjList->lateInitSdrObjList(*this, pNewModel);
return pObjList;
}
E3dObjList::~E3dObjList()
@@ -169,8 +169,9 @@
}
E3dObject::E3dObject()
: maSubList(),
E3dObject::E3dObject(SdrModel& rSdrModel)
: SdrAttrObj(rSdrModel),
maSubList(),
maLocalBoundVol(),
maTransformation(),
maFullTransform(),
@@ -303,14 +304,7 @@
maSubList.SetPage(pNewPage);
}
void E3dObject::SetModel(SdrModel* pNewModel)
{
SdrAttrObj::SetModel(pNewModel);
maSubList.SetModel(pNewModel);
}
// resize object, used from old 2d interfaces, e.g. in Move/Scale dialog (F4)
void E3dObject::NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact)
{
// Movement in X, Y in the eye coordinate system
@@ -656,9 +650,9 @@
return ImpGetResStr(STR_ObjNamePluralObj3d);
}
E3dObject* E3dObject::Clone() const
E3dObject* E3dObject::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< E3dObject >();
return CloneHelper< E3dObject >(pTargetModel);
}
E3dObject& E3dObject::operator=(const E3dObject& rObj)
@@ -736,9 +730,8 @@
return new sdr::properties::E3dCompoundProperties(*this);
}
E3dCompoundObject::E3dCompoundObject()
: E3dObject(),
E3dCompoundObject::E3dCompoundObject(SdrModel& rSdrModel)
: E3dObject(rSdrModel),
aMaterialAmbientColor()
{
// Set defaults
@@ -881,9 +874,20 @@
}
}
E3dCompoundObject* E3dCompoundObject::Clone() const
E3dCompoundObject* E3dCompoundObject::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< E3dCompoundObject >();
return CloneHelper< E3dCompoundObject >(pTargetModel);
}
E3dCompoundObject& E3dCompoundObject::operator=(const E3dCompoundObject& rObj)
{
if( this == &rObj )
return *this;
E3dObject::operator=(rObj);
aMaterialAmbientColor = rObj.aMaterialAmbientColor;
return *this;
}
// convert given basegfx::B3DPolyPolygon to screen coor
diff --git a/svx/source/engine3d/objfac3d.cxx b/svx/source/engine3d/objfac3d.cxx
index b704cf2..58e1479 100644
--- a/svx/source/engine3d/objfac3d.cxx
+++ b/svx/source/engine3d/objfac3d.cxx
@@ -52,24 +52,19 @@
switch ( aParams.nObjIdentifier )
{
case E3D_SCENE_ID:
return new E3dScene();
return new E3dScene(aParams.rSdrModel);
case E3D_POLYGONOBJ_ID :
return new E3dPolygonObj();
return new E3dPolygonObj(aParams.rSdrModel);
case E3D_CUBEOBJ_ID :
return new E3dCubeObj();
return new E3dCubeObj(aParams.rSdrModel);
case E3D_SPHEREOBJ_ID:
// Gets the dummy constructor, as this is only called when
// loading documents. The actual number of segments is however
// determined only after loading the members. This will result
// in that the first sphere will be immediately destroyed,
// although it was never used.
return new E3dSphereObj(E3dSphereObj::DUMMY);
return new E3dSphereObj(aParams.rSdrModel);
case E3D_EXTRUDEOBJ_ID:
return new E3dExtrudeObj();
return new E3dExtrudeObj(aParams.rSdrModel);
case E3D_LATHEOBJ_ID:
return new E3dLatheObj();
return new E3dLatheObj(aParams.rSdrModel);
case E3D_COMPOUNDOBJ_ID:
return new E3dCompoundObject();
return new E3dCompoundObject(aParams.rSdrModel);
}
}
return nullptr;
diff --git a/svx/source/engine3d/polygn3d.cxx b/svx/source/engine3d/polygn3d.cxx
index 190c0ca..bcb9ba8 100644
--- a/svx/source/engine3d/polygn3d.cxx
+++ b/svx/source/engine3d/polygn3d.cxx
@@ -25,17 +25,16 @@
#include <basegfx/polygon/b3dpolygon.hxx>
#include <basegfx/polygon/b3dpolygontools.hxx>
// DrawContact section
sdr::contact::ViewContact* E3dPolygonObj::CreateObjectSpecificViewContact()
{
return new sdr::contact::ViewContactOfE3dPolygon(*this);
}
E3dPolygonObj::E3dPolygonObj(
SdrModel& rSdrModel,
const basegfx::B3DPolyPolygon& rPolyPoly3D)
: E3dCompoundObject(),
: E3dCompoundObject(rSdrModel),
bLineOnly(true)
{
// Set geometry
@@ -48,9 +47,9 @@
CreateDefaultTexture();
}
E3dPolygonObj::E3dPolygonObj()
: E3dCompoundObject(),
bLineOnly(false) // added missing initialisation
E3dPolygonObj::E3dPolygonObj(SdrModel& rSdrModel)
: E3dCompoundObject(rSdrModel),
bLineOnly(false)
{
// Create no geometry
}
@@ -219,9 +218,23 @@
return nullptr;
}
E3dPolygonObj* E3dPolygonObj::Clone() const
E3dPolygonObj* E3dPolygonObj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< E3dPolygonObj >();
return CloneHelper< E3dPolygonObj >(pTargetModel);
}
E3dPolygonObj& E3dPolygonObj::operator=(const E3dPolygonObj& rObj)
{
if( this == &rObj )
return *this;
E3dCompoundObject::operator=(rObj);
aPolyPoly3D = rObj.aPolyPoly3D;
aPolyNormals3D = rObj.aPolyNormals3D;
aPolyTexture2D = rObj.aPolyTexture2D;
bLineOnly = rObj.bLineOnly;
return *this;
}
void E3dPolygonObj::SetLineOnly(bool bNew)
diff --git a/svx/source/engine3d/scene3d.cxx b/svx/source/engine3d/scene3d.cxx
index 444331d..38961d3 100644
--- a/svx/source/engine3d/scene3d.cxx
+++ b/svx/source/engine3d/scene3d.cxx
@@ -170,8 +170,8 @@
}
E3dScene::E3dScene()
: E3dObject(),
E3dScene::E3dScene(SdrModel& rSdrModel)
: E3dObject(rSdrModel),
aCamera(basegfx::B3DPoint(0.0, 0.0, 4.0), basegfx::B3DPoint()),
mp3DDepthRemapper(nullptr),
bDrawOnlySelected(false),
@@ -411,24 +411,9 @@
}
}
E3dScene* E3dScene::Clone() const
E3dScene* E3dScene::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< E3dScene >();
}
void E3dScene::SuspendReportingDirtyRects()
{
GetScene()->mbSkipSettingDirty = true;
}
void E3dScene::ResumeReportingDirtyRects()
{
GetScene()->mbSkipSettingDirty = false;
}
void E3dScene::SetAllSceneRectsDirty()
{
GetScene()->SetRectsDirty();
return CloneHelper< E3dScene >(pTargetModel);
}
E3dScene& E3dScene::operator=(const E3dScene& rObj)
@@ -463,6 +448,21 @@
return *this;
}
void E3dScene::SuspendReportingDirtyRects()
{
GetScene()->mbSkipSettingDirty = true;
}
void E3dScene::ResumeReportingDirtyRects()
{
GetScene()->mbSkipSettingDirty = false;
}
void E3dScene::SetAllSceneRectsDirty()
{
GetScene()->SetRectsDirty();
}
// Rebuild Light- and label- object lists rebuild (after loading, allocation)
void E3dScene::RebuildLists()
diff --git a/svx/source/engine3d/sphere3d.cxx b/svx/source/engine3d/sphere3d.cxx
index ecac051..75670c2 100644
--- a/svx/source/engine3d/sphere3d.cxx
+++ b/svx/source/engine3d/sphere3d.cxx
@@ -33,25 +33,24 @@
#include <sdr/contact/viewcontactofe3dsphere.hxx>
#include <basegfx/polygon/b3dpolygon.hxx>
// DrawContact section
sdr::contact::ViewContact* E3dSphereObj::CreateObjectSpecificViewContact()
{
return new sdr::contact::ViewContactOfE3dSphere(*this);
}
sdr::properties::BaseProperties* E3dSphereObj::CreateObjectSpecificProperties()
{
return new sdr::properties::E3dSphereProperties(*this);
}
// Build Sphere from polygon facets in latitude and longitude
E3dSphereObj::E3dSphereObj(E3dDefaultAttributes& rDefault, const basegfx::B3DPoint& rCenter, const basegfx::B3DVector& r3DSize)
: E3dCompoundObject()
E3dSphereObj::E3dSphereObj(
SdrModel& rSdrModel,
const E3dDefaultAttributes& rDefault,
const basegfx::B3DPoint& rCenter,
const basegfx::B3DVector& r3DSize)
: E3dCompoundObject(rSdrModel)
{
// Set defaults
SetDefaultAttributes(rDefault);
@@ -60,23 +59,16 @@
aSize = r3DSize;
}
// Create Sphere without creating the Polygons within
// This call is from the 3D Object Factory (objfac3d.cxx) and only when loading
// of documents. Here you do not need CreateSphere call, since the real number
// of segments is not even known yet. This was until 10.02.1997 a (small)
// memory leak.
E3dSphereObj::E3dSphereObj(Dummy /*dummy*/)
// the parameters it needs to be able to distinguish which
// constructors of the two is meant. The above is the default.
E3dSphereObj::E3dSphereObj(SdrModel& rSdrModel)
: E3dCompoundObject(rSdrModel)
{
// Set defaults
E3dDefaultAttributes aDefault;
const E3dDefaultAttributes aDefault;
SetDefaultAttributes(aDefault);
}
void E3dSphereObj::SetDefaultAttributes(E3dDefaultAttributes& rDefault)
void E3dSphereObj::SetDefaultAttributes(const E3dDefaultAttributes& rDefault)
{
// Set defaults
aCenter = rDefault.GetDefaultSphereCenter();
@@ -95,9 +87,21 @@
return nullptr;
}
E3dSphereObj* E3dSphereObj::Clone() const
E3dSphereObj* E3dSphereObj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< E3dSphereObj >();
return CloneHelper< E3dSphereObj >(pTargetModel);
}
E3dSphereObj& E3dSphereObj::operator=(const E3dSphereObj& rObj)
{
if( this == &rObj )
return *this;
E3dCompoundObject::operator=(rObj);
aCenter = rObj.aCenter;
aSize = rObj.aSize;
return *this;
}
// Set local parameters with geometry re-creating
diff --git a/svx/source/engine3d/view3d.cxx b/svx/source/engine3d/view3d.cxx
index 33d051f..31d6c36 100644
--- a/svx/source/engine3d/view3d.cxx
+++ b/svx/source/engine3d/view3d.cxx
@@ -224,10 +224,12 @@
}
}
E3dView::E3dView(SdrModel* pModel, OutputDevice* pOut) :
SdrView(pModel, pOut)
E3dView::E3dView(
SdrModel& rSdrModel,
OutputDevice* pOut)
: SdrView(rSdrModel, pOut)
{
InitView ();
InitView();
}
// DrawMarkedObj override, since possibly only a single 3D object is to be
@@ -579,7 +581,6 @@
pNewCompoundObj->SetTransform(aModifyingTransform * aNewObjectTrans);
// fill and insert new object
pNewCompoundObj->SetModel(pDstScene->GetModel());
pNewCompoundObj->SetPage(pDstScene->GetPage());
pNewCompoundObj->NbcSetLayer(pCompoundObj->GetLayer());
pNewCompoundObj->NbcSetStyleSheet(pCompoundObj->GetStyleSheet(), true);
@@ -700,10 +701,15 @@
if(pPath)
{
E3dDefaultAttributes aDefault = Get3DDefaultAttributes();
if(bExtrude)
{
aDefault.SetDefaultExtrudeCharacterMode(true);
}
else
{
aDefault.SetDefaultLatheCharacterMode(true);
}
// Get Itemset of the original object
SfxItemSet aSet(pObj->GetMergedItemSet());
@@ -736,13 +742,13 @@
E3dObject* p3DObj = nullptr;
if(bExtrude)
{
p3DObj = new E3dExtrudeObj(aDefault, pPath->GetPathPoly(), fDepth);
p3DObj = new E3dExtrudeObj(pObj->getSdrModelFromSdrObject(), aDefault, pPath->GetPathPoly(), fDepth);
}
else
{
basegfx::B2DPolyPolygon aPolyPoly2D(pPath->GetPathPoly());
aPolyPoly2D.transform(rLatheMat);
p3DObj = new E3dLatheObj(aDefault, aPolyPoly2D);
p3DObj = new E3dLatheObj(pObj->getSdrModelFromSdrObject(), aDefault, aPolyPoly2D);
}
// Set attribute
@@ -836,8 +842,10 @@
else
BegUndo(SvxResId(RID_SVX_3D_UNDO_LATHE));
SdrModel& rSdrModel(GetSdrMarkByIndex(0)->GetMarkedSdrObj()->getSdrModelFromSdrObject());
// Create a new scene for the created 3D object
E3dScene* pScene = new E3dScene;
E3dScene* pScene = new E3dScene(rSdrModel);
// Determine rectangle and possibly correct it
tools::Rectangle aRect = GetAllMarkedRect();
@@ -1262,7 +1270,6 @@
}
// Set current 3D drawing object, create the scene for this
E3dScene* E3dView::SetCurrent3DObj(E3dObject* p3DObj)
{
DBG_ASSERT(p3DObj != nullptr, "Who puts in a NULL-pointer here");
@@ -1275,7 +1282,7 @@
tools::Rectangle aRect(0,0, static_cast<long>(fW), static_cast<long>(fH));
E3dScene* pScene = new E3dScene;
E3dScene* pScene = new E3dScene(p3DObj->getSdrModelFromSdrObject());
InitScene(pScene, fW, fH, aVolume.getMaxZ() + ((fW + fH) / 4.0));
diff --git a/svx/source/form/fmdmod.cxx b/svx/source/form/fmdmod.cxx
index d487399..ac197b2 100644
--- a/svx/source/form/fmdmod.cxx
+++ b/svx/source/form/fmdmod.cxx
@@ -31,6 +31,7 @@
::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL SvxFmMSFactory::createInstance(const OUString& rServiceSpecifier)
{
::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xRet;
if ( rServiceSpecifier.startsWith( "com.sun.star.form.component." ) )
{
css::uno::Reference<css::uno::XComponentContext> xContext = comphelper::getProcessComponentContext();
@@ -38,11 +39,17 @@
}
else if ( rServiceSpecifier == "com.sun.star.drawing.ControlShape" )
{
SdrObject* pObj = new FmFormObj();
SdrModel* pTargetModel = getSdrModelFromUnoModel();
OSL_ENSURE(pTargetModel, "Got no SdrModel for SdrShape construction (!)");
SdrObject* pObj = new FmFormObj(*pTargetModel);
xRet = static_cast<cppu::OWeakObject*>(static_cast<SvxShape_UnoImplHelper*>(new SvxShapeControl(pObj)));
}
if (!xRet.is())
{
xRet = SvxUnoDrawMSFactory::createInstance(rServiceSpecifier);
}
return xRet;
}
diff --git a/svx/source/form/fmdpage.cxx b/svx/source/form/fmdpage.cxx
index 1e81e8f..45ac667 100644
--- a/svx/source/form/fmdpage.cxx
+++ b/svx/source/form/fmdpage.cxx
@@ -73,10 +73,13 @@
if ( aShapeType == "com.sun.star.drawing.ShapeControl" // compatibility
|| aShapeType == "com.sun.star.drawing.ControlShape"
)
return new FmFormObj();
{
return new FmFormObj(GetSdrPage()->getSdrModelFromSdrPage());
}
else
{
return SvxDrawPage::CreateSdrObject_( xDescr );
}
}
css::uno::Reference< css::drawing::XShape > SvxFmDrawPage::CreateShape( SdrObject *pObj ) const
diff --git a/svx/source/form/fmobj.cxx b/svx/source/form/fmobj.cxx
index 5863ec9..44431b8 100644
--- a/svx/source/form/fmobj.cxx
+++ b/svx/source/form/fmobj.cxx
@@ -55,26 +55,27 @@
using namespace ::svxform;
FmFormObj::FmFormObj(const OUString& rModelName)
:SdrUnoObj ( rModelName )
,m_nPos ( -1 )
,m_pLastKnownRefDevice ( nullptr )
FmFormObj::FmFormObj(
SdrModel& rSdrModel,
const OUString& rModelName)
: SdrUnoObj(rSdrModel, rModelName)
,m_nPos(-1)
,m_pLastKnownRefDevice(nullptr)
{
// normally, this is done in SetUnoControlModel, but if the call happened in the base class ctor,
// then our incarnation of it was not called (since we were not constructed at this time).
impl_checkRefDevice_nothrow( true );
}
FmFormObj::FmFormObj()
:SdrUnoObj ( "" )
,m_nPos ( -1 )
,m_pLastKnownRefDevice ( nullptr )
FmFormObj::FmFormObj(SdrModel& rSdrModel)
: SdrUnoObj(rSdrModel, "")
,m_nPos(-1)
,m_pLastKnownRefDevice(nullptr)
{
// Stuff that old SetModel also did:
impl_checkRefDevice_nothrow();
}
FmFormObj::~FmFormObj()
{
@@ -105,7 +106,7 @@
void FmFormObj::impl_checkRefDevice_nothrow( bool _force )
{
const FmFormModel* pFormModel = dynamic_cast<FmFormModel*>( GetModel() );
const FmFormModel* pFormModel = dynamic_cast<FmFormModel*>(&getSdrModelFromSdrObject());
if ( !pFormModel || !pFormModel->ControlsUseRefDevice() )
return;
@@ -357,9 +358,9 @@
}
FmFormObj* FmFormObj::Clone() const
FmFormObj* FmFormObj::Clone(SdrModel* pTargetModel) const
{
FmFormObj* pFormObject = CloneHelper< FmFormObj >();
FmFormObj* pFormObject = CloneHelper< FmFormObj >(pTargetModel);
DBG_ASSERT(pFormObject != nullptr, "FmFormObj::Clone : invalid clone !");
if (pFormObject)
pFormObject->clonedFrom(this);
@@ -368,13 +369,6 @@
}
void FmFormObj::NbcReformatText()
{
impl_checkRefDevice_nothrow();
SdrUnoObj::NbcReformatText();
}
FmFormObj& FmFormObj::operator= (const FmFormObj& rObj)
{
if( this == &rObj )
@@ -401,6 +395,13 @@
}
void FmFormObj::NbcReformatText()
{
impl_checkRefDevice_nothrow();
SdrUnoObj::NbcReformatText();
}
namespace
{
OUString lcl_getFormComponentAccessPath(const Reference< XInterface >& _xElement, Reference< XInterface >& _rTopLevelElement)
@@ -584,14 +585,6 @@
return Reference<XInterface>( xDestContainer, UNO_QUERY );
}
void FmFormObj::SetModel( SdrModel* _pNewModel )
{
SdrUnoObj::SetModel( _pNewModel );
impl_checkRefDevice_nothrow();
}
FmFormObj* FmFormObj::GetFormObject( SdrObject* _pSdrObject )
{
FmFormObj* pFormObject = dynamic_cast< FmFormObj* >( _pSdrObject );
diff --git a/svx/source/form/fmobjfac.cxx b/svx/source/form/fmobjfac.cxx
index bfc834e..a640caa 100644
--- a/svx/source/form/fmobjfac.cxx
+++ b/svx/source/form/fmobjfac.cxx
@@ -106,10 +106,10 @@
}
}
IMPL_STATIC_LINK(
FmFormObjFactory, MakeObject, SdrObjCreatorParams, aParams, SdrObject*)
IMPL_STATIC_LINK(FmFormObjFactory, MakeObject, SdrObjCreatorParams, aParams, SdrObject*)
{
SdrObject* pNewObj = nullptr;
if (aParams.nInventor == SdrInventor::FmForm)
{
OUString sServiceSpecifier;
@@ -213,9 +213,9 @@
// create the actual object
if ( !sServiceSpecifier.isEmpty() )
pNewObj = new FmFormObj(sServiceSpecifier);
pNewObj = new FmFormObj(aParams.rSdrModel, sServiceSpecifier);
else
pNewObj = new FmFormObj();
pNewObj = new FmFormObj(aParams.rSdrModel);
// initialize some properties which we want to differ from the defaults
for ( PropertyValueArray::const_iterator aInitProp = aInitialProperties.begin();
diff --git a/svx/source/form/fmpage.cxx b/svx/source/form/fmpage.cxx
index 7f267cb..ca79aba 100644
--- a/svx/source/form/fmpage.cxx
+++ b/svx/source/form/fmpage.cxx
@@ -49,22 +49,17 @@
FmFormPage::FmFormPage(FmFormModel& rModel, bool bMasterPage)
:SdrPage(rModel, bMasterPage)
,m_pImpl( new FmFormPageImpl( *this ) )
: SdrPage(rModel, bMasterPage)
,m_pImpl( new FmFormPageImpl( *this ) )
{
}
FmFormPage::FmFormPage(const FmFormPage& rPage)
:SdrPage(rPage)
,m_pImpl(new FmFormPageImpl( *this ) )
void FmFormPage::lateInit(const FmFormPage& rPage)
{
}
// call parent
SdrPage::lateInit( rPage );
void FmFormPage::lateInit(const FmFormPage& rPage, FmFormModel* const pNewModel)
{
SdrPage::lateInit( rPage, pNewModel );
// copy local variables (former stuff from copy constructor)
m_pImpl->initFrom( rPage.GetImpl() );
m_sPageName = rPage.m_sPageName;
}
@@ -74,65 +69,22 @@
{
}
void FmFormPage::SetModel(SdrModel* pNewModel)
SdrPage* FmFormPage::Clone(SdrModel* pNewModel) const
{
/* #35055# */
// we want to call the super's "SetModel" method even if the model is the
// same, in case code somewhere in the system depends on it. But our code
// doesn't, so get the old model to do a check.
SdrModel *pOldModel = GetModel();
SdrPage::SetModel( pNewModel );
/* #35055# */
if ( ( pOldModel != pNewModel ) && m_pImpl )
{
try
{
Reference< css::form::XForms > xForms( m_pImpl->getForms( false ) );
if ( xForms.is() )
{
// we want to keep the current collection, just reset the model
// with which it's associated.
FmFormModel* pDrawModel = static_cast<FmFormModel*>( GetModel() );
SfxObjectShell* pObjShell = pDrawModel->GetObjectShell();
if ( pObjShell )
xForms->setParent( pObjShell->GetModel() );
}
}
catch( css::uno::Exception const& )
{
OSL_FAIL( "UNO Exception caught resetting model for m_pImpl (FmFormPageImpl) in FmFormPage::SetModel" );
}
}
}
SdrPage* FmFormPage::Clone() const
{
return Clone(nullptr);
}
SdrPage* FmFormPage::Clone(SdrModel* const pNewModel) const
{
FmFormPage* const pNewPage = new FmFormPage(*this);
FmFormModel* pFormModel = nullptr;
if (pNewModel)
{
pFormModel = dynamic_cast<FmFormModel*>(pNewModel);
assert(pFormModel);
}
pNewPage->lateInit(*this, pFormModel);
return pNewPage;
FmFormModel& rFmFormModel(static_cast< FmFormModel& >(nullptr == pNewModel ? getSdrModelFromSdrPage() : *pNewModel));
FmFormPage* pClonedFmFormPage(
new FmFormPage(
rFmFormModel,
IsMasterPage()));
pClonedFmFormPage->lateInit(*this);
return pClonedFmFormPage;
}
void FmFormPage::InsertObject(SdrObject* pObj, size_t nPos)
{
SdrPage::InsertObject( pObj, nPos );
if (GetModel())
static_cast<FmFormModel*>(GetModel())->GetUndoEnv().Inserted(pObj);
static_cast< FmFormModel& >(getSdrModelFromSdrPage()).GetUndoEnv().Inserted(pObj);
}
@@ -217,8 +169,8 @@
SdrObject* FmFormPage::RemoveObject(size_t nObjNum)
{
SdrObject* pObj = SdrPage::RemoveObject(nObjNum);
if (pObj && GetModel())
static_cast<FmFormModel*>(GetModel())->GetUndoEnv().Removed(pObj);
if (pObj)
static_cast< FmFormModel& >(getSdrModelFromSdrPage()).GetUndoEnv().Removed(pObj);
return pObj;
}
diff --git a/svx/source/form/fmpgeimp.cxx b/svx/source/form/fmpgeimp.cxx
index 3d974c0..417f84a 100644
--- a/svx/source/form/fmpgeimp.cxx
+++ b/svx/source/form/fmpgeimp.cxx
@@ -315,16 +315,15 @@
m_aFormsCreationHdl.Call( *this );
}
FmFormModel* pFormsModel = dynamic_cast<FmFormModel*>( m_rPage.GetModel() );
FmFormModel& rFmFormModel(dynamic_cast< FmFormModel& >(m_rPage.getSdrModelFromSdrPage()));
// give the newly created collection a place in the universe
SfxObjectShell* pObjShell = pFormsModel ? pFormsModel->GetObjectShell() : nullptr;
SfxObjectShell* pObjShell(rFmFormModel.GetObjectShell());
if ( pObjShell )
m_xForms->setParent( pObjShell->GetModel() );
// tell the UNDO environment that we have a new forms collection
if ( pFormsModel )
pFormsModel->GetUndoEnv().AddForms( Reference<XNameContainer>(m_xForms,UNO_QUERY_THROW) );
rFmFormModel.GetUndoEnv().AddForms( Reference<XNameContainer>(m_xForms,UNO_QUERY_THROW) );
}
return m_xForms;
}
@@ -396,13 +395,13 @@
// did not find an existing suitable form -> create a new one
if ( !xForm.is() )
{
SdrModel* pModel = m_rPage.GetModel();
SdrModel& rModel(m_rPage.getSdrModelFromSdrPage());
if( pModel->IsUndoEnabled() )
if( rModel.IsUndoEnabled() )
{
OUString aStr(SvxResId(RID_STR_FORM));
OUString aUndoStr(SvxResId(RID_STR_UNDO_CONTAINER_INSERT));
pModel->BegUndo(aUndoStr.replaceFirst("'#'", aStr));
rModel.BegUndo(aUndoStr.replaceFirst("'#'", aStr));
}
try
@@ -417,13 +416,15 @@
OUString sName = SvxResId(RID_STR_STDFORMNAME);
xFormProps->setPropertyValue( FM_PROP_NAME, makeAny( sName ) );
if( pModel->IsUndoEnabled() )
if( rModel.IsUndoEnabled() )
{
pModel->AddUndo(new FmUndoContainerAction(*static_cast<FmFormModel*>(pModel),
FmUndoContainerAction::Inserted,
xForms,
xForm,
xForms->getCount()));
rModel.AddUndo(
new FmUndoContainerAction(
static_cast< FmFormModel& >(rModel),
FmUndoContainerAction::Inserted,
xForms,
xForm,
xForms->getCount()));
}
xForms->insertByName( sName, makeAny( xForm ) );
xCurrentForm = xForm;
@@ -434,8 +435,8 @@
xForm.clear();
}
if( pModel->IsUndoEnabled() )
pModel->EndUndo();
if( rModel.IsUndoEnabled() )
rModel.EndUndo();
}
return xForm;
@@ -474,16 +475,15 @@
// If no css::form found, then create a new one
if (!xForm.is())
{
SdrModel* pModel = m_rPage.GetModel();
const bool bUndo = pModel->IsUndoEnabled();
SdrModel& rModel(m_rPage.getSdrModelFromSdrPage());
const bool bUndo(rModel.IsUndoEnabled());
if( bUndo )
{
OUString aStr(SvxResId(RID_STR_FORM));
OUString aUndoStr(SvxResId(RID_STR_UNDO_CONTAINER_INSERT));
aUndoStr = aUndoStr.replaceFirst("#", aStr);
pModel->BegUndo(aUndoStr);
rModel.BegUndo(aUndoStr);
}
xForm.set(::comphelper::getProcessServiceFactory()->createInstance(FM_SUN_COMPONENT_FORM), UNO_QUERY);
@@ -515,17 +515,19 @@
if( bUndo )
{
Reference< css::container::XIndexContainer > xContainer( getForms(), UNO_QUERY );
pModel->AddUndo(new FmUndoContainerAction(*static_cast<FmFormModel*>(pModel),
FmUndoContainerAction::Inserted,
xContainer,
xForm,
xContainer->getCount()));
rModel.AddUndo(
new FmUndoContainerAction(
static_cast< FmFormModel& >(rModel),
FmUndoContainerAction::Inserted,
xContainer,
xForm,
xContainer->getCount()));
}
getForms()->insertByName( sName, makeAny( xForm ) );
if( bUndo )
pModel->EndUndo();
rModel.EndUndo();
}
xCurrentForm = xForm;
}
diff --git a/svx/source/form/fmshimp.cxx b/svx/source/form/fmshimp.cxx
index a21e904..560b2fa 100644
--- a/svx/source/form/fmshimp.cxx
+++ b/svx/source/form/fmshimp.cxx
@@ -3845,10 +3845,8 @@
{
// lock the undo env so the forms can change non-transient properties while loading
// (without this my doc's modified flag would be set)
FmFormModel* pModel = dynamic_cast<FmFormModel*>( _pPage->GetModel() );
DBG_ASSERT( pModel, "FmXFormShell::loadForms: invalid model!" );
if ( pModel )
pModel->GetUndoEnv().Lock();
FmFormModel& rFmFormModel(dynamic_cast< FmFormModel& >(_pPage->getSdrModelFromSdrPage()));
rFmFormModel.GetUndoEnv().Lock();
// load all forms
Reference< XIndexAccess > xForms;
@@ -3894,9 +3892,8 @@
}
}
if ( pModel )
// unlock the environment
pModel->GetUndoEnv().UnLock();
// unlock the environment
rFmFormModel.GetUndoEnv().UnLock();
}
}
diff --git a/svx/source/form/fmview.cxx b/svx/source/form/fmview.cxx
index 2adad0d..6acd8b8 100644
--- a/svx/source/form/fmview.cxx
+++ b/svx/source/form/fmview.cxx
@@ -77,14 +77,14 @@
using namespace ::svxform;
using namespace ::svx;
FmFormView::FmFormView( FmFormModel* pModel, OutputDevice* pOut )
:E3dView(pModel,pOut)
FmFormView::FmFormView(
SdrModel& rSdrModel,
OutputDevice* pOut)
: E3dView(rSdrModel, pOut)
{
Init();
}
void FmFormView::Init()
{
pFormShell = nullptr;
diff --git a/svx/source/form/fmvwimp.cxx b/svx/source/form/fmvwimp.cxx
index cbf975f..30dd8ad 100644
--- a/svx/source/form/fmvwimp.cxx
+++ b/svx/source/form/fmvwimp.cxx
@@ -1350,7 +1350,7 @@
if ( bCheckbox )
return pControl;
SdrObjGroup* pGroup = new SdrObjGroup();
SdrObjGroup* pGroup = new SdrObjGroup(getView()->getSdrModelFromSdrView());
SdrObjList* pObjList = pGroup->GetSubList();
pObjList->InsertObject( pLabel );
pObjList->InsertObject( pControl );
@@ -1462,7 +1462,7 @@
// group objects
SdrObjGroup* pGroup = new SdrObjGroup();
SdrObjGroup* pGroup = new SdrObjGroup(getView()->getSdrModelFromSdrView());
SdrObjList* pObjList = pGroup->GetSubList();
pObjList->InsertObject(pLabel);
pObjList->InsertObject(pControl);
@@ -1476,7 +1476,11 @@
const MapMode eSourceMode(MapUnit::Map100thMM);
const sal_uInt16 nObjID = OBJ_FM_BUTTON;
::Size controlSize(4000, 500);
FmFormObj *pControl = static_cast<FmFormObj*>(SdrObjFactory::MakeNewObject( SdrInventor::FmForm, nObjID, nullptr ));
FmFormObj *pControl = static_cast<FmFormObj*>(
SdrObjFactory::MakeNewObject(
getView()->getSdrModelFromSdrView(),
SdrInventor::FmForm,
nObjID));
controlSize.setWidth( long(controlSize.Width() * eTargetMode.GetScaleX()) );
controlSize.setHeight( long(controlSize.Height() * eTargetMode.GetScaleY()) );
::Point controlPos( OutputDevice::LogicToLogic( ::Point( controlSize.Width(), 0 ), eSourceMode, eTargetMode ) );
@@ -1576,11 +1580,18 @@
// the label
::std::unique_ptr< SdrUnoObj > pLabel;
Reference< XPropertySet > xLabelModel;
if ( bNeedLabel )
{
pLabel.reset( dynamic_cast< SdrUnoObj* >(
SdrObjFactory::MakeNewObject( _nInventor, _nLabelObjectID, _pLabelPage, _pModel ) ) );
SdrObjFactory::MakeNewObject(
*_pModel,
_nInventor,
_nLabelObjectID,
_pLabelPage)));
OSL_ENSURE( pLabel.get(), "FmXFormView::createControlLabelPair: could not create the label!" );
if ( !pLabel.get() )
return false;
@@ -1606,8 +1617,14 @@
// the control
::std::unique_ptr< SdrUnoObj > pControl( dynamic_cast< SdrUnoObj* >(
SdrObjFactory::MakeNewObject( _nInventor, _nControlObjectID, _pControlPage, _pModel ) ) );
SdrObjFactory::MakeNewObject(
*_pModel,
_nInventor,
_nControlObjectID,
_pControlPage)));
OSL_ENSURE( pControl.get(), "FmXFormView::createControlLabelPair: could not create the control!" );
if ( !pControl.get() )
return false;
diff --git a/svx/source/gallery2/galobj.cxx b/svx/source/gallery2/galobj.cxx
index d9e6a20..a91fabd 100644
--- a/svx/source/gallery2/galobj.cxx
+++ b/svx/source/gallery2/galobj.cxx
@@ -458,7 +458,7 @@
if(aObjRect.GetWidth() && aObjRect.GetHeight())
{
ScopedVclPtrInstance< VirtualDevice > pVDev;
FmFormView aView(const_cast< FmFormModel* >(&rModel), pVDev);
FmFormView aView(const_cast< FmFormModel& >(rModel), pVDev);
aView.ShowSdrPage(const_cast< FmFormPage* >(pPage));
aView.MarkAllObj();
diff --git a/svx/source/gallery2/galtheme.cxx b/svx/source/gallery2/galtheme.cxx
index de21ba0..9c8b27b 100644
--- a/svx/source/gallery2/galtheme.cxx
+++ b/svx/source/gallery2/galtheme.cxx
@@ -801,7 +801,7 @@
{
ScopedVclPtrInstance< VirtualDevice > pVDev;
pVDev->SetMapMode( MapMode( MapUnit::Map100thMM ) );
FmFormView aView( aModel.GetModel(), pVDev );
FmFormView aView(*aModel.GetModel(), pVDev);
aView.hideMarkHandles();
aView.ShowSdrPage(aView.GetModel()->GetPage(0));
@@ -1244,7 +1244,7 @@
if( aModel.GetModel() )
{
SdrPage* pPage = aModel.GetModel()->GetPage(0);
SdrGrafObj* pGrafObj = new SdrGrafObj( *pGraphic );
SdrGrafObj* pGrafObj = new SdrGrafObj(*aModel.GetModel(), *pGraphic );
pGrafObj->AppendUserData( new SgaIMapInfo( aImageMap ) );
pPage->InsertObject( pGrafObj );
diff --git a/svx/source/inc/cell.hxx b/svx/source/inc/cell.hxx
index 5b7f71b0..86c7579 100644
--- a/svx/source/inc/cell.hxx
+++ b/svx/source/inc/cell.hxx
@@ -91,8 +91,6 @@
SVX_DLLPRIVATE SdrTextVertAdjust GetTextVerticalAdjust() const;
SdrTextHorzAdjust GetTextHorizontalAdjust() const;
SVX_DLLPRIVATE virtual void SetModel(SdrModel* pNewModel) override;
SVX_DLLPRIVATE void merge( sal_Int32 nColumnSpan, sal_Int32 nRowSpan );
SVX_DLLPRIVATE void mergeContent( const CellRef& xSourceCell );
SVX_DLLPRIVATE void replaceContentAndFormating( const CellRef& xSourceCell );
diff --git a/svx/source/inc/fmobj.hxx b/svx/source/inc/fmobj.hxx
index 6b9adf6..da9f7c6 100644
--- a/svx/source/inc/fmobj.hxx
+++ b/svx/source/inc/fmobj.hxx
@@ -27,7 +27,7 @@
// FmFormObj
class SVX_DLLPUBLIC FmFormObj: public SdrUnoObj
class SVX_DLLPUBLIC FmFormObj : public SdrUnoObj
{
FmFormObj( const FmFormObj& ) = delete;
@@ -47,9 +47,10 @@
// only to be used for comparison with the current ref device!
public:
FmFormObj(const OUString& rModelName);
FmFormObj();
FmFormObj(
SdrModel& rSdrModel,
const OUString& rModelName);
FmFormObj(SdrModel& rSdrModel);
SAL_DLLPRIVATE const css::uno::Reference< css::container::XIndexContainer>&
GetOriginalParent() const { return m_xParent; }
@@ -72,12 +73,10 @@
SAL_DLLPRIVATE virtual sal_uInt16 GetObjIdentifier() const override;
SAL_DLLPRIVATE virtual void NbcReformatText() override;
SAL_DLLPRIVATE virtual FmFormObj* Clone() const override;
SAL_DLLPRIVATE virtual FmFormObj* Clone(SdrModel* pTargetModel = nullptr) const override;
// #116235# virtual SdrObject* Clone(SdrPage* pPage, SdrModel* pModel) const;
SAL_DLLPRIVATE FmFormObj& operator= (const FmFormObj& rObj);
SAL_DLLPRIVATE virtual void SetModel(SdrModel* pNewModel) override;
SAL_DLLPRIVATE void clonedFrom(const FmFormObj* _pSource);
SAL_DLLPRIVATE static css::uno::Reference< css::uno::XInterface> ensureModelEnv(
diff --git a/svx/source/inc/tablemodel.hxx b/svx/source/inc/tablemodel.hxx
index e59626d..791a431 100644
--- a/svx/source/inc/tablemodel.hxx
+++ b/svx/source/inc/tablemodel.hxx
@@ -176,7 +176,7 @@
rtl::Reference< TableColumns > mxTableColumns;
rtl::Reference< TableRows > mxTableRows;
SdrTableObj* mpTableObj;
SdrTableObj* mpTableObj; // TTTT should be reference
bool mbModified;
bool mbNotifyPending;
diff --git a/svx/source/sdr/contact/viewcontactofgraphic.cxx b/svx/source/sdr/contact/viewcontactofgraphic.cxx
index b7c3086..3c0622b 100644
--- a/svx/source/sdr/contact/viewcontactofgraphic.cxx
+++ b/svx/source/sdr/contact/viewcontactofgraphic.cxx
@@ -241,7 +241,7 @@
aDraftText += " ...";
}
if (!aDraftText.isEmpty() && GetGrafObject().GetModel())
if (!aDraftText.isEmpty())
{
// #i103255# Goal is to produce TextPrimitives which hold the given text as
// BlockText in the available space. It would be very tricky to do
@@ -253,8 +253,7 @@
// needed and can be deleted.
// create temp RectObj as TextObj and set needed attributes
SdrRectObj aRectObj(OBJ_TEXT);
aRectObj.SetModel(GetGrafObject().GetModel());
SdrRectObj aRectObj(GetGrafObject().getSdrModelFromSdrObject(), OBJ_TEXT);
aRectObj.NbcSetText(aDraftText);
aRectObj.SetMergedItem(SvxColorItem(COL_LIGHTRED, EE_CHAR_COLOR));
diff --git a/svx/source/sdr/contact/viewcontactofsdrrectobj.cxx b/svx/source/sdr/contact/viewcontactofsdrrectobj.cxx
index c0ab639..f02ba91 100644
--- a/svx/source/sdr/contact/viewcontactofsdrrectobj.cxx
+++ b/svx/source/sdr/contact/viewcontactofsdrrectobj.cxx
@@ -72,8 +72,7 @@
drawinglayer::primitive2d::calculateRelativeCornerRadius(nCornerRadius, aObjectRange, fCornerRadiusX, fCornerRadiusY);
// #i105856# use knowledge about pickthrough from the model
const bool bPickThroughTransparentTextFrames(
GetRectObj().GetModel() && GetRectObj().GetModel()->IsPickThroughTransparentTextFrames());
const bool bPickThroughTransparentTextFrames(GetRectObj().getSdrModelFromSdrObject().IsPickThroughTransparentTextFrames());
// create primitive. Always create primitives to allow the decomposition of
// SdrRectanglePrimitive2D to create needed invisible elements for HitTest and/or BoundRect
diff --git a/svx/source/sdr/contact/viewobjectcontactofgraphic.cxx b/svx/source/sdr/contact/viewobjectcontactofgraphic.cxx
index 95ed93a..f6e425f 100644
--- a/svx/source/sdr/contact/viewobjectcontactofgraphic.cxx
+++ b/svx/source/sdr/contact/viewobjectcontactofgraphic.cxx
@@ -242,7 +242,7 @@
{
// prepare primitive generation with evtl. loading the graphic when it's swapped out
SdrGrafObj& rGrafObj = const_cast< ViewObjectContactOfGraphic* >(this)->getSdrGrafObj();
bool bDoAsynchronGraphicLoading(rGrafObj.GetModel() && rGrafObj.GetModel()->IsSwapGraphics());
bool bDoAsynchronGraphicLoading(rGrafObj.getSdrModelFromSdrObject().IsSwapGraphics());
if( bDoAsynchronGraphicLoading && rGrafObj.IsSwappedOut() )
{
diff --git a/svx/source/sdr/primitive2d/sdrattributecreator.cxx b/svx/source/sdr/primitive2d/sdrattributecreator.cxx
index 60e130c8..4529717 100644
--- a/svx/source/sdr/primitive2d/sdrattributecreator.cxx
+++ b/svx/source/sdr/primitive2d/sdrattributecreator.cxx
@@ -527,7 +527,7 @@
bool bChainable = rTextObj.IsChainable();
if(rText.GetOutlinerParaObject() && rText.GetModel())
if(rText.GetOutlinerParaObject())
{
// added TextEdit text suppression
bool bInEditMode(false);
@@ -564,7 +564,7 @@
const SdrTextAniKind eAniKind(rTextObj.GetTextAniKind());
// #i107346#
const SdrOutliner& rDrawTextOutliner = rText.GetModel()->GetDrawOutliner(&rTextObj);
const SdrOutliner& rDrawTextOutliner(rText.GetObject().getSdrModelFromSdrObject().GetDrawOutliner(&rTextObj));
const bool bWrongSpell(rDrawTextOutliner.GetControlWord() & EEControlBits::ONLINESPELLING);
return attribute::SdrTextAttribute(
diff --git a/svx/source/sdr/primitive2d/sdrtextprimitive2d.cxx b/svx/source/sdr/primitive2d/sdrtextprimitive2d.cxx
index 0cdd5d0..e3d7aba 100644
--- a/svx/source/sdr/primitive2d/sdrtextprimitive2d.cxx
+++ b/svx/source/sdr/primitive2d/sdrtextprimitive2d.cxx
@@ -64,16 +64,16 @@
sal_Int16 nRetval(0);
SdrPage* pPage = GetSdrPageFromXDrawPage(rxDrawPage);
if(pPage && pPage->GetModel())
if(pPage)
{
if( (pPage->GetPageNum() == 0) && !pPage->IsMasterPage() )
{
// handout page!
return pPage->GetModel()->getHandoutPageCount();
return pPage->getSdrModelFromSdrPage().getHandoutPageCount();
}
else
{
const sal_uInt16 nPageCount(pPage->GetModel()->GetPageCount());
const sal_uInt16 nPageCount(pPage->getSdrModelFromSdrPage().GetPageCount());
nRetval = (static_cast<sal_Int16>(nPageCount) - 1) / 2;
}
}
@@ -188,9 +188,9 @@
}
// #i101443# check change of TextBackgroundolor
if(!bDoDelete && getSdrText() && getSdrText()->GetModel())
if(!bDoDelete && getSdrText())
{
SdrOutliner& rDrawOutliner = getSdrText()->GetModel()->GetDrawOutliner();
SdrOutliner& rDrawOutliner = getSdrText()->GetObject().getSdrModelFromSdrObject().GetDrawOutliner();
aNewTextBackgroundColor = rDrawOutliner.GetBackgroundColor();
bNewTextBackgroundColorIsSet = true;
@@ -223,9 +223,9 @@
nCurrentlyValidPageCount = getPageCount(xCurrentlyVisualizingPage);
}
if(!bNewTextBackgroundColorIsSet && getSdrText() && getSdrText()->GetModel())
if(!bNewTextBackgroundColorIsSet && getSdrText())
{
SdrOutliner& rDrawOutliner = getSdrText()->GetModel()->GetDrawOutliner();
SdrOutliner& rDrawOutliner = getSdrText()->GetObject().getSdrModelFromSdrObject().GetDrawOutliner();
aNewTextBackgroundColor = rDrawOutliner.GetBackgroundColor();
}
diff --git a/svx/source/sdr/properties/attributeproperties.cxx b/svx/source/sdr/properties/attributeproperties.cxx
index b4038ea..d14b7ff 100644
--- a/svx/source/sdr/properties/attributeproperties.cxx
+++ b/svx/source/sdr/properties/attributeproperties.cxx
@@ -44,33 +44,40 @@
#include <svx/svdmodel.hxx>
#include <svx/svdtrans.hxx>
#include <svx/svdpage.hxx>
#include <svx/svdograf.hxx>
#include <svx/svdoole2.hxx>
namespace sdr
{
namespace properties
{
void AttributeProperties::ImpAddStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr)
SfxStyleSheet* AttributeProperties::ImpGetDefaultStyleSheet() const
{
// test if old StyleSheet is cleared, else it would be lost
// after this method -> memory leak (!)
DBG_ASSERT(!mpStyleSheet, "Old style sheet not deleted before setting new one (!)");
// use correct default stylesheet #119287#
const SdrGrafObj* pIsSdrGrafObj(dynamic_cast< const SdrGrafObj* >(&GetSdrObject()));
const SdrOle2Obj* pIsSdrOle2Obj(dynamic_cast< const SdrOle2Obj* >(&GetSdrObject()));
SfxStyleSheet* pRetval(nullptr);
if(pNewStyleSheet)
if(pIsSdrGrafObj || pIsSdrOle2Obj)
{
mpStyleSheet = pNewStyleSheet;
pRetval = GetSdrObject().getSdrModelFromSdrObject().GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj();
}
else
{
pRetval = GetSdrObject().getSdrModelFromSdrObject().GetDefaultStyleSheet();
}
// local ItemSet is needed here, force it
GetObjectItemSet();
return pRetval;
}
// register as listener
StartListening(pNewStyleSheet->GetPool());
StartListening(*pNewStyleSheet);
void AttributeProperties::ImpSetParentAtSfxItemSet(bool bDontRemoveHardAttr)
{
if(HasSfxItemSet() && mpStyleSheet)
{
// Delete hard attributes where items are set in the style sheet
if(!bDontRemoveHardAttr)
{
const SfxItemSet& rStyle = pNewStyleSheet->GetItemSet();
const SfxItemSet& rStyle = mpStyleSheet->GetItemSet();
SfxWhichIter aIter(rStyle);
sal_uInt16 nWhich = aIter.FirstWhich();
@@ -86,7 +93,37 @@
}
// set new stylesheet as parent
mpItemSet->SetParent(&pNewStyleSheet->GetItemSet());
mpItemSet->SetParent(&mpStyleSheet->GetItemSet());
}
else
{
OSL_ENSURE(false, "ImpSetParentAtSfxItemSet called without SfxItemSet/SfxStyleSheet (!)");
}
}
void AttributeProperties::ImpAddStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr)
{
// test if old StyleSheet is cleared, else it would be lost
// after this method -> memory leak (!)
DBG_ASSERT(!mpStyleSheet, "Old style sheet not deleted before setting new one (!)");
if(pNewStyleSheet)
{
// local remember
mpStyleSheet = pNewStyleSheet;
if(HasSfxItemSet())
{
// register as listener
StartListening(pNewStyleSheet->GetPool());
StartListening(*pNewStyleSheet);
// only apply the following when we have an SfxItemSet already, else
if(GetStyleSheet())
{
ImpSetParentAtSfxItemSet(bDontRemoveHardAttr);
}
}
}
}
@@ -99,7 +136,7 @@
EndListening(mpStyleSheet->GetPool());
// reset parent of ItemSet
if(mpItemSet)
if(HasSfxItemSet())
{
mpItemSet->SetParent(nullptr);
}
@@ -127,15 +164,59 @@
: DefaultProperties(rObj),
mpStyleSheet(nullptr)
{
// Do nothing else, esp. do *not* try to get and set
// a default SfxStyle sheet. Nothing is allowed to be done
// that may lead to calls to virtual functions like
// CreateObjectSpecificItemSet - these would go *wrong*.
// Thus the rest is lazy-init from here.
}
AttributeProperties::AttributeProperties(const AttributeProperties& rProps, SdrObject& rObj)
: DefaultProperties(rProps, rObj),
mpStyleSheet(nullptr)
{
if(rProps.GetStyleSheet())
SfxStyleSheet* pTargetStyleSheet(rProps.GetStyleSheet());
if(pTargetStyleSheet && &rObj.getSdrModelFromSdrObject() != &GetSdrObject().getSdrModelFromSdrObject())
{
ImpAddStyleSheet(rProps.GetStyleSheet(), true);
// TTTT It is a clone to another model, thus the TargetStyleSheet
// is probably also from another SdrModel, so do *not* simply use it.
//
// The DefaultProperties::Clone already has cloned the ::SET items
// to a new SfxItemSet in the new SfxItemPool. There are quite some
// possibilities to continue:
// - Do not use StyleSheet (will do this for now)
// - Search for same StyleSheet in Target-SdrModel and use if found
// (use e.g. Name)
// - Clone used StyleSheet(s) to Target-SdrModel and use
// - Set all Attributes from the StyleSheet as hard attributes at the
// SfxItemSet
// The original AW080 uses 'ImpModelChange' (see there) which Clones
// and uses the used StyleSheets if there is a Target-SfxItemPool
// and sets to hard attributes if not. This may be used later if needed,
// but for now only a single UnitTest uses this Clone-scenario and works
// well with not using the TargetStyleSheet. The logic Cloning
// StyleSheets *should* - if needed - be on a higher level where it is
// potentially better known what would be the correct thing to do.
pTargetStyleSheet = nullptr;
}
if(pTargetStyleSheet)
{
if(HasSfxItemSet())
{
// The SfxItemSet has been cloned and exists,
// we can directly set the SfxStyleSheet at it
ImpAddStyleSheet(pTargetStyleSheet, true);
}
else
{
// No SfxItemSet exists yet (there is none in
// the source, so none was cloned). Remember the
// SfxStyleSheet to set it when the SfxItemSet
// got constructed on-demand
mpStyleSheet = pTargetStyleSheet;
}
}
}
@@ -149,6 +230,42 @@
return *(new AttributeProperties(*this, rObj));
}
const SfxItemSet& AttributeProperties::GetObjectItemSet() const
{
// remember if we had a SfxItemSet already
const bool bHadSfxItemSet(HasSfxItemSet());
// call parent - this will then guarantee
// SfxItemSet existance
DefaultProperties::GetObjectItemSet();
if(!bHadSfxItemSet)
{
if(GetStyleSheet())
{
// Late-Init of setting parent to SfxStyleSheet after
// it's creation. See copy-constructor and how it remembers
// the SfxStyleSheet there.
// It is necessary to reset mpStyleSheet to nullptr to
// not trigger alarm insde ImpAddStyleSheet (!)
SfxStyleSheet* pNew(mpStyleSheet);
const_cast< AttributeProperties* >(this)->mpStyleSheet = nullptr;
const_cast< AttributeProperties* >(this)->ImpAddStyleSheet(
pNew,
true);
}
else
{
// Set missing defaults and do not RemoveHardAttributes
const_cast< AttributeProperties* >(this)->ImpAddStyleSheet(
ImpGetDefaultStyleSheet(),
true);
}
}
return *mpItemSet;
}
void AttributeProperties::ItemSetChanged(const SfxItemSet& /*rSet*/)
{
// own modifications
@@ -164,64 +281,72 @@
if(pNewItem)
{
const SfxPoolItem* pResultItem = nullptr;
SdrModel* pModel = GetSdrObject().GetModel();
SdrModel& rModel(GetSdrObject().getSdrModelFromSdrObject());
switch( nWhich )
{
case XATTR_FILLBITMAP:
{
pResultItem = static_cast<const XFillBitmapItem*>(pNewItem)->checkForUniqueItem( pModel );
// TTTT checkForUniqueItem should use SdrModel&
pResultItem = static_cast<const XFillBitmapItem*>(pNewItem)->checkForUniqueItem( &rModel );
break;
}
case XATTR_LINEDASH:
{
pResultItem = static_cast<const XLineDashItem*>(pNewItem)->checkForUniqueItem( pModel );
pResultItem = static_cast<const XLineDashItem*>(pNewItem)->checkForUniqueItem( &rModel );
break;
}
case XATTR_LINESTART:
{
pResultItem = static_cast<const XLineStartItem*>(pNewItem)->checkForUniqueItem( pModel );
pResultItem = static_cast<const XLineStartItem*>(pNewItem)->checkForUniqueItem( &rModel );
break;
}
case XATTR_LINEEND:
{
pResultItem = static_cast<const XLineEndItem*>(pNewItem)->checkForUniqueItem( pModel );
pResultItem = static_cast<const XLineEndItem*>(pNewItem)->checkForUniqueItem( &rModel );
break;
}
case XATTR_FILLGRADIENT:
{
pResultItem = static_cast<const XFillGradientItem*>(pNewItem)->checkForUniqueItem( pModel );
pResultItem = static_cast<const XFillGradientItem*>(pNewItem)->checkForUniqueItem( &rModel );
break;
}
case XATTR_FILLFLOATTRANSPARENCE:
{
// #85953# allow all kinds of XFillFloatTransparenceItem to be set
pResultItem = static_cast<const XFillFloatTransparenceItem*>(pNewItem)->checkForUniqueItem( pModel );
pResultItem = static_cast<const XFillFloatTransparenceItem*>(pNewItem)->checkForUniqueItem( &rModel );
break;
}
case XATTR_FILLHATCH:
{
pResultItem = static_cast<const XFillHatchItem*>(pNewItem)->checkForUniqueItem( pModel );
pResultItem = static_cast<const XFillHatchItem*>(pNewItem)->checkForUniqueItem( &rModel );
break;
}
}
// set item
GetObjectItemSet();
if(!HasSfxItemSet())
{
GetObjectItemSet();
}
if(pResultItem)
{
// force ItemSet
mpItemSet->Put(*pResultItem);
// delete item if it was a generated one
delete pResultItem;
}
else
{
mpItemSet->Put(*pNewItem);
}
}
else
{
// clear item if ItemSet exists
if(mpItemSet)
if(HasSfxItemSet())
{
mpItemSet->ClearItem(nWhich);
}
@@ -230,6 +355,12 @@
void AttributeProperties::SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr)
{
// guarantee SfxItemSet existance here
if(!HasSfxItemSet())
{
GetObjectItemSet();
}
ImpRemoveStyleSheet();
ImpAddStyleSheet(pNewStyleSheet, bDontRemoveHardAttr);
@@ -243,237 +374,18 @@
return mpStyleSheet;
}
void AttributeProperties::MoveToItemPool(SfxItemPool* pSrcPool, SfxItemPool* pDestPool, SdrModel* pNewModel)
{
OSL_ASSERT(pNewModel!=nullptr);
if(pSrcPool && pDestPool && (pSrcPool != pDestPool))
{
if(mpItemSet)
{
// migrate ItemSet to new pool. Scaling is NOT necessary
// because this functionality is used by UNDO only. Thus
// objects and ItemSets would be moved back to their original
// pool before usage.
SfxStyleSheet* pStySheet = GetStyleSheet();
if(pStySheet)
{
ImpRemoveStyleSheet();
}
auto pOldSet = std::move(mpItemSet);
mpItemSet.reset(pOldSet->Clone(false, pDestPool));
SdrModel::MigrateItemSet(pOldSet.get(), mpItemSet.get(), pNewModel);
// set stylesheet (if used)
if(pStySheet)
{
// #i109515#
SfxItemPool* pStyleSheetPool = &pStySheet->GetPool().GetPool();
if(pStyleSheetPool == pDestPool)
{
// just re-set stylesheet
ImpAddStyleSheet(pStySheet, true);
}
else
{
// StyleSheet is NOT from the correct pool.
// Look one up in the right pool with the same
// name or use the default.
// Look up the style in the new document.
OSL_ASSERT(pNewModel->GetStyleSheetPool() != nullptr);
SfxStyleSheet* pNewStyleSheet = dynamic_cast<SfxStyleSheet*>(
pNewModel->GetStyleSheetPool()->Find(
pStySheet->GetName(),
SfxStyleFamily::All));
if (pNewStyleSheet == nullptr
|| &pNewStyleSheet->GetPool().GetPool() != pDestPool)
{
// There is no copy of the style in the new
// document. Use the default as a fallback.
pNewStyleSheet = pNewModel->GetDefaultStyleSheet();
}
ImpAddStyleSheet(pNewStyleSheet, true);
}
}
}
}
}
void AttributeProperties::SetModel(SdrModel* pOldModel, SdrModel* pNewModel)
{
if(pOldModel != pNewModel && pNewModel)
{
// For a living model move the items from one pool to the other
if(pOldModel)
{
// If metric has changed, scale items.
MapUnit aOldUnit(pOldModel->GetScaleUnit());
MapUnit aNewUnit(pNewModel->GetScaleUnit());
bool bScaleUnitChanged(aNewUnit != aOldUnit);
Fraction aMetricFactor;
if(bScaleUnitChanged)
{
aMetricFactor = GetMapFactor(aOldUnit, aNewUnit).X();
Scale(aMetricFactor);
}
// Move all styles which are used by the object to the new
// StyleSheet pool
SfxStyleSheet* pOldStyleSheet = GetStyleSheet();
if(pOldStyleSheet)
{
SfxStyleSheetBase* pSheet = pOldStyleSheet;
SfxStyleSheetBasePool* pOldPool = pOldModel->GetStyleSheetPool();
SfxStyleSheetBasePool* pNewPool = pNewModel->GetStyleSheetPool();
DBG_ASSERT(pOldPool, "Properties::SetModel(): Object has StyleSheet but no StyleSheetPool (!)");
if(pOldPool && pNewPool)
{
// build a list of to-be-copied Styles
std::vector<SfxStyleSheetBase*> aStyleList;
SfxStyleSheetBase* pAnchor = nullptr;
while(pSheet)
{
pAnchor = pNewPool->Find(pSheet->GetName(), pSheet->GetFamily());
if(!pAnchor)
{
aStyleList.push_back(pSheet);
pSheet = pOldPool->Find(pSheet->GetParent(), pSheet->GetFamily());
}
else
{
// the style does exist
pSheet = nullptr;
}
}
// copy and set the parents
SfxStyleSheetBase* pNewSheet = nullptr;
SfxStyleSheetBase* pLastSheet = nullptr;
SfxStyleSheetBase* pForThisObject = nullptr;
for (std::vector<SfxStyleSheetBase*>::const_iterator iter = aStyleList.begin(), aEnd = aStyleList.end()
; iter != aEnd; ++iter)
{
pNewSheet = &pNewPool->Make((*iter)->GetName(), (*iter)->GetFamily(), (*iter)->GetMask());
pNewSheet->GetItemSet().Put((*iter)->GetItemSet(), false);
if(bScaleUnitChanged)
{
sdr::properties::ScaleItemSet(pNewSheet->GetItemSet(), aMetricFactor);
}
if(pLastSheet)
{
pLastSheet->SetParent(pNewSheet->GetName());
}
if(!pForThisObject)
{
pForThisObject = pNewSheet;
}
pLastSheet = pNewSheet;
}
// Set link to the Style found in the Pool
if(pAnchor && pLastSheet)
{
pLastSheet->SetParent(pAnchor->GetName());
}
// if list was empty (all Styles exist in destination pool)
// pForThisObject is not yet set
if(!pForThisObject && pAnchor)
{
pForThisObject = pAnchor;
}
// De-register at old and register at new Style
if(GetStyleSheet() != pForThisObject)
{
ImpRemoveStyleSheet();
ImpAddStyleSheet(static_cast<SfxStyleSheet*>(pForThisObject), true);
}
}
else
{
// there is no StyleSheetPool in the new model, thus set
// all items as hard items in the object
std::vector<const SfxItemSet*> aSetList;
const SfxItemSet* pItemSet = &pOldStyleSheet->GetItemSet();
while(pItemSet)
{
aSetList.push_back(pItemSet);
pItemSet = pItemSet->GetParent();
}
auto pNewSet = CreateObjectSpecificItemSet(pNewModel->GetItemPool());
std::vector<const SfxItemSet*>::reverse_iterator riter;
for (riter = aSetList.rbegin(); riter != aSetList.rend(); ++riter)
pNewSet->Put(*(*riter));
// Items which were hard attributes before need to stay
if(mpItemSet)
{
SfxWhichIter aIter(*mpItemSet);
sal_uInt16 nWhich = aIter.FirstWhich();
while(nWhich)
{
if(mpItemSet->GetItemState(nWhich, false) == SfxItemState::SET)
{
pNewSet->Put(mpItemSet->Get(nWhich));
}
nWhich = aIter.NextWhich();
}
}
if(bScaleUnitChanged)
{
ScaleItemSet(*pNewSet, aMetricFactor);
}
if(mpItemSet)
{
if(GetStyleSheet())
{
ImpRemoveStyleSheet();
}
}
mpItemSet = std::move(pNewSet);
}
}
}
// each object gets the default Style if there is none set yet.
if(!GetStyleSheet() && pNewModel)
{
GetObjectItemSet(); // #118414 force ItemSet to allow style to be set
SetStyleSheet(pNewModel->GetDefaultStyleSheet(), true);
}
}
}
void AttributeProperties::ForceStyleToHardAttributes()
{
if(!GetStyleSheet() || dynamic_cast<const SfxStyleSheet *>(mpStyleSheet) == nullptr)
return;
// force SfxItemSet existence
if(!HasSfxItemSet())
{
GetObjectItemSet();
}
// prepare copied, new itemset, but WITHOUT parent
GetObjectItemSet();
SfxItemSet* pDestItemSet = new SfxItemSet(*mpItemSet);
pDestItemSet->SetParent(nullptr);
@@ -539,22 +451,22 @@
{
// Style needs to be exchanged
SfxStyleSheet* pNewStSh = nullptr;
SdrModel* pModel = rObj.GetModel();
SdrModel& rModel(rObj.getSdrModelFromSdrObject());
// Do nothing if object is in destruction, else a StyleSheet may be found from
// a StyleSheetPool which is just being deleted itself. and thus it would be fatal
// to register as listener to that new StyleSheet.
if(pModel && !rObj.IsInDestruction())
if(!rObj.IsInDestruction())
{
if(dynamic_cast<const SfxStyleSheet *>(GetStyleSheet()) != nullptr)
{
pNewStSh = static_cast<SfxStyleSheet*>(pModel->GetStyleSheetPool()->Find(
pNewStSh = static_cast<SfxStyleSheet*>(rModel.GetStyleSheetPool()->Find(
GetStyleSheet()->GetParent(), GetStyleSheet()->GetFamily()));
}
if(!pNewStSh)
{
pNewStSh = pModel->GetDefaultStyleSheet();
pNewStSh = rModel.GetDefaultStyleSheet();
}
}
diff --git a/svx/source/sdr/properties/defaultproperties.cxx b/svx/source/sdr/properties/defaultproperties.cxx
index 167e368..56d23b6 100644
--- a/svx/source/sdr/properties/defaultproperties.cxx
+++ b/svx/source/sdr/properties/defaultproperties.cxx
@@ -25,14 +25,14 @@
#include <svl/itemset.hxx>
#include <svl/whiter.hxx>
#include <vcl/outdev.hxx>
#include <vector>
#include <svx/svdobj.hxx>
#include <svx/svddef.hxx>
#include <svx/svdpool.hxx>
#include <editeng/eeitem.hxx>
#include <libxml/xmlwriter.h>
#include <svx/svdmodel.hxx>
#include <svx/svdtrans.hxx>
namespace sdr
{
@@ -56,7 +56,29 @@
{
if(rProps.mpItemSet)
{
mpItemSet.reset(rProps.mpItemSet->Clone());
// Clone may be to another model and thus another ItemPool.
// SfxItemSet supports that thus we are able to Clone all
// SfxItemState::SET items to the target pool.
mpItemSet.reset(
rProps.mpItemSet->Clone(
true,
&rObj.getSdrModelFromSdrObject().GetItemPool()));
// React on ModelChange: If metric has changed, scale items.
// As seen above, clone is supported, but scale is not included,
// thus: TTTT maybe add scale to SfxItemSet::Clone() (?)
if(&rObj.getSdrModelFromSdrObject() != &GetSdrObject().getSdrModelFromSdrObject())
{
const MapUnit aOldUnit(GetSdrObject().getSdrModelFromSdrObject().GetScaleUnit());
const MapUnit aNewUnit(rObj.getSdrModelFromSdrObject().GetScaleUnit());
const bool bScaleUnitChanged(aNewUnit != aOldUnit);
if(bScaleUnitChanged)
{
const Fraction aMetricFactor(GetMapFactor(aOldUnit, aNewUnit).X());
Scale(aMetricFactor);
}
}
// do not keep parent info, this may be changed by later constructors.
// This class just copies the ItemSet, ignore parent.
diff --git a/svx/source/sdr/properties/e3dsceneproperties.cxx b/svx/source/sdr/properties/e3dsceneproperties.cxx
index 1b3bdbf..a5f5994 100644
--- a/svx/source/sdr/properties/e3dsceneproperties.cxx
+++ b/svx/source/sdr/properties/e3dsceneproperties.cxx
@@ -267,31 +267,6 @@
return pRetval;
}
void E3dSceneProperties::MoveToItemPool(SfxItemPool* pSrcPool, SfxItemPool* pDestPool, SdrModel* pNewModel)
{
if(pSrcPool && pDestPool && (pSrcPool != pDestPool))
{
// call parent
E3dProperties::MoveToItemPool(pSrcPool, pDestPool, pNewModel);
// own reaction, but only with outmost scene
E3dScene& rObj = static_cast<E3dScene&>(GetSdrObject());
const SdrObjList* pSubList = rObj.GetSubList();
if(pSubList && rObj.GetScene() == &rObj)
{
SdrObjListIter a3DIterator(*pSubList, SdrIterMode::DeepWithGroups);
while(a3DIterator.IsMore())
{
E3dObject* pObj = static_cast<E3dObject*>(a3DIterator.Next());
DBG_ASSERT(dynamic_cast<const E3dObject* >(pObj) != nullptr, "In scenes there are only 3D objects allowed (!)");
pObj->GetProperties().MoveToItemPool(pSrcPool, pDestPool, pNewModel);
}
}
}
}
void E3dSceneProperties::SetSceneItemsFromCamera()
{
// force ItemSet
diff --git a/svx/source/sdr/properties/groupproperties.cxx b/svx/source/sdr/properties/groupproperties.cxx
index 7b46704..a79f7cc 100644
--- a/svx/source/sdr/properties/groupproperties.cxx
+++ b/svx/source/sdr/properties/groupproperties.cxx
@@ -246,31 +246,6 @@
// nothing to do here, groups have no items and thus no default items, too.
}
void GroupProperties::MoveToItemPool(SfxItemPool* pSrcPool, SfxItemPool* pDestPool, SdrModel* pNewModel)
{
if(pSrcPool && pDestPool && (pSrcPool != pDestPool))
{
const SdrObjList* pSub = static_cast<const SdrObjGroup&>(GetSdrObject()).GetSubList();
const size_t nCount(pSub->GetObjCount());
for(size_t a = 0; a < nCount; ++a)
{
pSub->GetObj(a)->GetProperties().MoveToItemPool(pSrcPool, pDestPool, pNewModel);
}
// also clear local ItemSet, it's only temporary for group objects anyways.
if(mpItemSet)
{
// copy/paste is still using clone operators and MoveToItemPool functionality.
// Since SfxItemSet contains a pool pointer, ClearItem is not enough here.
// The ItemSet for merge is constructed on demand, so it's enough here to
// just delete it and set to 0L.
// mpItemSet->ClearItem();
mpItemSet.reset();
}
}
}
void GroupProperties::ForceStyleToHardAttributes()
{
const SdrObjList* pSub = static_cast<const SdrObjGroup&>(GetSdrObject()).GetSubList();
diff --git a/svx/source/sdr/properties/properties.cxx b/svx/source/sdr/properties/properties.cxx
index c8082ab..256e6ea 100644
--- a/svx/source/sdr/properties/properties.cxx
+++ b/svx/source/sdr/properties/properties.cxx
@@ -80,18 +80,6 @@
ClearObjectItem(nWhich);
}
void BaseProperties::MoveToItemPool(SfxItemPool* /*pSrcPool*/, SfxItemPool* /*pDestPool*/, SdrModel* /*pNewModel*/)
{
// Move properties to a new ItemPool. Default implementation does nothing.
// Override where an ItemSet is implemented.
}
void BaseProperties::SetModel(SdrModel* /*pOldModel*/, SdrModel* /*pNewModel*/)
{
// Set new model. Default implementation does nothing.
// Override where an ItemSet is implemented.
}
void BaseProperties::ForceStyleToHardAttributes()
{
// force all attributes which come from styles to hard attributes
diff --git a/svx/source/sdr/properties/textproperties.cxx b/svx/source/sdr/properties/textproperties.cxx
index 0d57e93..f6e1aba0 100644
--- a/svx/source/sdr/properties/textproperties.cxx
+++ b/svx/source/sdr/properties/textproperties.cxx
@@ -240,7 +240,7 @@
// #i101556# StyleSheet has changed -> new version
maVersion++;
if( rObj.GetModel() /*&& !rObj.IsTextEditActive()*/ && !rObj.IsLinkedText() )
if(!rObj.IsLinkedText() )
{
SdrOutliner& rOutliner = rObj.ImpGetDrawOutliner();
@@ -279,9 +279,7 @@
aNewStyleSheetName = aNewStyleSheetName.copy(0, aNewStyleSheetName.getLength() - 1);
sal_Int16 nDepth = rOutliner.GetDepth(nPara);
aNewStyleSheetName += OUString::number( nDepth <= 0 ? 1 : nDepth + 1);
SdrModel* pModel = rObj.GetModel();
SfxStyleSheetBasePool* pStylePool = (pModel != nullptr) ? pModel->GetStyleSheetPool() : nullptr;
SfxStyleSheetBasePool* pStylePool(rObj.getSdrModelFromSdrObject().GetStyleSheetPool());
SfxStyleSheet* pNewStyle = nullptr;
if(pStylePool)
pNewStyle = static_cast<SfxStyleSheet*>(pStylePool->Find(aNewStyleSheetName, GetStyleSheet()->GetFamily()));
@@ -397,11 +395,9 @@
// now the standard TextProperties stuff
SdrTextObj& rObj = static_cast<SdrTextObj&>(GetSdrObject());
if(rObj.GetModel()
&& !rObj.IsTextEditActive()
&& !rObj.IsLinkedText())
if(!rObj.IsTextEditActive() && !rObj.IsLinkedText())
{
Outliner* pOutliner = SdrMakeOutliner(OutlinerMode::OutlineObject, *rObj.GetModel());
Outliner* pOutliner = SdrMakeOutliner(OutlinerMode::OutlineObject, rObj.getSdrModelFromSdrObject());
const svx::ITextProvider& rTextProvider(getTextProvider());
sal_Int32 nText = rTextProvider.getTextCount();
while (nText--)
diff --git a/svx/source/svdraw/svdcrtv.cxx b/svx/source/svdraw/svdcrtv.cxx
index 33cf4eb..f2d739e 100644
--- a/svx/source/svdraw/svdcrtv.cxx
+++ b/svx/source/svdraw/svdcrtv.cxx
@@ -197,8 +197,10 @@
ImpClearConnectMarker();
}
SdrCreateView::SdrCreateView(SdrModel* pModel1, OutputDevice* pOut)
: SdrDragView(pModel1,pOut),
SdrCreateView::SdrCreateView(
SdrModel& rSdrModel,
OutputDevice* pOut)
: SdrDragView(rSdrModel, pOut),
mpCoMaOverlay(nullptr),
mpCreateViewExtraData(new ImpSdrCreateViewExtraData())
{
@@ -348,7 +350,10 @@
nCurrentInvent=nInvent;
nCurrentIdent=nIdent;
SdrObject * pObj = (nIdent == OBJ_NONE) ? nullptr :
SdrObjFactory::MakeNewObject(nInvent, nIdent, nullptr);
SdrObjFactory::MakeNewObject(
*GetModel(),
nInvent,
nIdent);
if(pObj)
{
@@ -407,14 +412,14 @@
{
pCurrentCreate->SetPage(pCreatePV->GetPage());
}
else if (mpModel)
{
pCurrentCreate->SetModel(mpModel);
}
}
else
{
pCurrentCreate = SdrObjFactory::MakeNewObject(nInvent, nIdent, pCreatePV->GetPage(), mpModel);
pCurrentCreate = SdrObjFactory::MakeNewObject(
*mpModel,
nInvent,
nIdent,
pCreatePV->GetPage());
}
Point aPnt(rPnt);
diff --git a/svx/source/svdraw/svddrgv.cxx b/svx/source/svdraw/svddrgv.cxx
index b13383b..5d18d68 100644
--- a/svx/source/svdraw/svddrgv.cxx
+++ b/svx/source/svdraw/svddrgv.cxx
@@ -71,8 +71,10 @@
mbSolidDragging = getOptionsDrawinglayer().IsSolidDragCreate();
}
SdrDragView::SdrDragView(SdrModel* pModel1, OutputDevice* pOut)
: SdrExchangeView(pModel1,pOut)
SdrDragView::SdrDragView(
SdrModel& rSdrModel,
OutputDevice* pOut)
: SdrExchangeView(rSdrModel, pOut)
{
ImpClearVars();
}
diff --git a/svx/source/svdraw/svdedtv.cxx b/svx/source/svdraw/svdedtv.cxx
index c373caa..ce620ae 100644
--- a/svx/source/svdraw/svdedtv.cxx
+++ b/svx/source/svdraw/svdedtv.cxx
@@ -88,8 +88,10 @@
bPossibilitiesDirty=true; // << Purify didn't like this
}
SdrEditView::SdrEditView(SdrModel* pModel1, OutputDevice* pOut):
SdrMarkView(pModel1,pOut)
SdrEditView::SdrEditView(
SdrModel& rSdrModel,
OutputDevice* pOut)
: SdrMarkView(rSdrModel, pOut)
{
ImpClearVars();
}
@@ -98,7 +100,6 @@
{
}
void SdrEditView::InsertNewLayer(const OUString& rName, sal_uInt16 nPos)
{
SdrLayerAdmin& rLA=mpModel->GetLayerAdmin();
diff --git a/svx/source/svdraw/svdedtv2.cxx b/svx/source/svdraw/svdedtv2.cxx
index 01820c6..ef63499 100644
--- a/svx/source/svdraw/svdedtv2.cxx
+++ b/svx/source/svdraw/svdedtv2.cxx
@@ -1126,7 +1126,7 @@
// #i73441# check insert list before taking actions
if(pInsOL)
{
SdrPathObj* pPath = new SdrPathObj(OBJ_PATHFILL, aMergePolyPolygonA);
SdrPathObj* pPath = new SdrPathObj(pAttrObj->getSdrModelFromSdrObject(), OBJ_PATHFILL, aMergePolyPolygonA);
ImpCopyAttributes(pAttrObj, pPath);
pInsOL->InsertObject(pPath, nInsPos);
if( bUndo )
@@ -1134,7 +1134,7 @@
// #i124760# To have a correct selection with only the new object it is necessary to
// unmark all objects first. If not doing so, there may remain invalid pointers to objects
//TTTT:Not needed for aw080 (!)
// TTTT:Not needed for aw080 (!)
UnmarkAllObj(pInsPV);
MarkObj(pPath, pInsPV, false, true);
@@ -1355,7 +1355,7 @@
}
}
SdrPathObj* pPath = new SdrPathObj(eKind,aPolyPolygon);
SdrPathObj* pPath = new SdrPathObj(pAttrObj->getSdrModelFromSdrObject(), eKind, aPolyPolygon);
// attributes of the lowest object
ImpCopyAttributes(pAttrObj, pPath);
@@ -1522,7 +1522,10 @@
if(!bMakeLines || nPointCount < 2)
{
SdrPathObj* pPath = new SdrPathObj(static_cast<SdrObjKind>(pSrcPath->GetObjIdentifier()), basegfx::B2DPolyPolygon(rCandidate));
SdrPathObj* pPath = new SdrPathObj(
pSrcPath->getSdrModelFromSdrObject(),
static_cast<SdrObjKind>(pSrcPath->GetObjIdentifier()),
basegfx::B2DPolyPolygon(rCandidate));
ImpCopyAttributes(pSrcPath, pPath);
pLast = pPath;
rOL.InsertObject(pPath, rPos);
@@ -1556,7 +1559,10 @@
aNewPolygon.append(rCandidate.getB2DPoint(nNextIndex));
}
SdrPathObj* pPath = new SdrPathObj(eKind, basegfx::B2DPolyPolygon(aNewPolygon));
SdrPathObj* pPath = new SdrPathObj(
pSrcPath->getSdrModelFromSdrObject(),
eKind,
basegfx::B2DPolyPolygon(aNewPolygon));
ImpCopyAttributes(pSrcPath, pPath);
pLast = pPath;
rOL.InsertObject(pPath, rPos);
@@ -1584,7 +1590,6 @@
{
SdrObject* pCandidate = pReplacement->Clone();
DBG_ASSERT(pCandidate, "SdrEditView::ImpDismantleOneObject: Could not clone SdrObject (!)");
pCandidate->SetModel(pCustomShape->GetModel());
if(pCustomShape->GetMergedItem(SDRATTR_SHADOW).GetValue())
{
@@ -1603,7 +1608,9 @@
{
// #i37011# also create a text object and add at rPos + 1
SdrObject* pTextObj = SdrObjFactory::MakeNewObject(
pCustomShape->GetObjInventor(), OBJ_TEXT, nullptr, pCustomShape->GetModel());
pCustomShape->getSdrModelFromSdrObject(),
pCustomShape->GetObjInventor(),
OBJ_TEXT);
// Copy text content
OutlinerParaObject* pParaObj = pCustomShape->GetOutlinerParaObject();
@@ -1754,14 +1761,13 @@
SdrMark* pM=GetSdrMarkByIndex(nm);
if (pM->GetPageView()==pPV)
{
if (pGrp==nullptr)
SdrObject* pObj=pM->GetMarkedSdrObj();
if (nullptr==pGrp)
{
if (pGrp==nullptr)
pGrp=new SdrObjGroup;
pGrp = new SdrObjGroup(pObj->getSdrModelFromSdrObject());
pDstLst=pGrp->GetSubList();
DBG_ASSERT(pDstLst!=nullptr,"Alleged group object doesn't return object list.");
}
SdrObject* pObj=pM->GetMarkedSdrObj();
pSrcLst=pObj->GetObjList();
if (pSrcLst!=pSrcLst0)
{
diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx
index 51ef80f..d03a55f 100644
--- a/svx/source/svdraw/svdedxv.cxx
+++ b/svx/source/svdraw/svdedxv.cxx
@@ -88,8 +88,10 @@
bTextEditOnlyOneView=false;
}
SdrObjEditView::SdrObjEditView(SdrModel* pModel1, OutputDevice* pOut):
SdrGlueEditView(pModel1,pOut),
SdrObjEditView::SdrObjEditView(
SdrModel& rSdrModel,
OutputDevice* pOut)
: SdrGlueEditView(rSdrModel, pOut),
mpOldTextEditUndoManager(nullptr)
{
ImpClearVars();
@@ -1089,7 +1091,7 @@
mxTextEditObj.reset( pObj );
pTextEditOutliner=pGivenOutliner;
if (pTextEditOutliner==nullptr)
pTextEditOutliner = SdrMakeOutliner( OutlinerMode::TextObject, *mxTextEditObj->GetModel() );
pTextEditOutliner = SdrMakeOutliner( OutlinerMode::TextObject, mxTextEditObj->getSdrModelFromSdrObject() );
{
SvtAccessibilityOptions aOptions;
@@ -1588,8 +1590,7 @@
}
if( pTEObj &&
pTEObj->GetModel() &&
!pTEObj->GetModel()->isLocked() &&
!pTEObj->getSdrModelFromSdrObject().isLocked() &&
pTEObj->GetBroadcaster())
{
SdrHint aHint(SdrHintKind::EndEdit, *pTEObj);
@@ -2408,11 +2409,17 @@
const SdrMarkList& rMarkList=GetMarkedObjectList();
if( rMarkList.GetMarkCount() == 1 )
{
const SdrObject* pObj= rMarkList.GetMark(0)->GetMarkedSdrObj();
const SdrObject* pObj(rMarkList.GetMark(0)->GetMarkedSdrObj());
SdrView* pView(dynamic_cast< SdrView* >(this));
// check for table
if( pObj && (pObj->GetObjInventor() == SdrInventor::Default ) && (pObj->GetObjIdentifier() == OBJ_TABLE) )
if(pObj && pView && (pObj->GetObjInventor() == SdrInventor::Default ) && (pObj->GetObjIdentifier() == OBJ_TABLE))
{
mxSelectionController = sdr::table::CreateTableController( this, static_cast<sdr::table::SdrTableObj const *>(pObj), mxLastSelectionController );
mxSelectionController = sdr::table::CreateTableController(
*pView,
static_cast<const sdr::table::SdrTableObj&>(*pObj),
mxLastSelectionController);
if( mxSelectionController.is() )
{
mxLastSelectionController.clear();
diff --git a/svx/source/svdraw/svdetc.cxx b/svx/source/svdraw/svdetc.cxx
index 4b29e2c..24479d6 100644
--- a/svx/source/svdraw/svdetc.cxx
+++ b/svx/source/svdraw/svdetc.cxx
@@ -531,9 +531,6 @@
const SdrLayerIDSet& rVisLayers,
Color& rCol)
{
if(!rList.GetModel())
return false;
bool bRet(false);
bool bMaster(rList.GetPage() && rList.GetPage()->IsMasterPage());
@@ -576,9 +573,6 @@
Color& rCol,
bool bSkipBackgroundShape)
{
if(!rPage.GetModel())
return false;
bool bRet(impGetSdrObjListFillColor(rPage, rPnt, rTextEditPV, rVisLayers, rCol));
if(!bRet && !rPage.IsMasterPage())
diff --git a/svx/source/svdraw/svdfmtf.cxx b/svx/source/svdraw/svdfmtf.cxx
index f3806362..3f3a935 100644
--- a/svx/source/svdraw/svdfmtf.cxx
+++ b/svx/source/svdraw/svdfmtf.cxx
@@ -557,6 +557,7 @@
if(!aNewRange.isEmpty())
{
pObj = new SdrPathObj(
*mpModel,
aNewPoly.isClosed() ? OBJ_POLY : OBJ_PLIN,
aNewPoly);
@@ -686,7 +687,10 @@
if(bCreateLineObject)
{
SdrPathObj* pPath = new SdrPathObj(OBJ_LINE, basegfx::B2DPolyPolygon(aLine));
SdrPathObj* pPath = new SdrPathObj(
*mpModel,
OBJ_LINE,
basegfx::B2DPolyPolygon(aLine));
mnLineWidth = nNewLineWidth;
maLineJoin = rLineInfo.GetLineJoin();
maLineCap = rLineInfo.GetLineCap();
@@ -705,14 +709,18 @@
void ImpSdrGDIMetaFileImport::DoAction(MetaRectAction const & rAct)
{
SdrRectObj* pRect=new SdrRectObj(rAct.GetRect());
SdrRectObj* pRect = new SdrRectObj(
*mpModel,
rAct.GetRect());
SetAttributes(pRect);
InsertObj(pRect);
}
void ImpSdrGDIMetaFileImport::DoAction(MetaRoundRectAction const & rAct)
{
SdrRectObj* pRect=new SdrRectObj(rAct.GetRect());
SdrRectObj* pRect = new SdrRectObj(
*mpModel,
rAct.GetRect());
SetAttributes(pRect);
long nRad=(rAct.GetHorzRound()+rAct.GetVertRound())/2;
if (nRad!=0) {
@@ -725,7 +733,10 @@
void ImpSdrGDIMetaFileImport::DoAction(MetaEllipseAction const & rAct)
{
SdrCircObj* pCirc=new SdrCircObj(OBJ_CIRC,rAct.GetRect());
SdrCircObj* pCirc=new SdrCircObj(
*mpModel,
OBJ_CIRC,
rAct.GetRect());
SetAttributes(pCirc);
InsertObj(pCirc);
}
@@ -735,7 +746,10 @@
Point aCenter(rAct.GetRect().Center());
long nStart=GetAngle(rAct.GetStartPoint()-aCenter);
long nEnd=GetAngle(rAct.GetEndPoint()-aCenter);
SdrCircObj* pCirc=new SdrCircObj(OBJ_CARC,rAct.GetRect(),nStart,nEnd);
SdrCircObj* pCirc = new SdrCircObj(
*mpModel,
OBJ_CARC,
rAct.GetRect(),nStart,nEnd);
SetAttributes(pCirc);
InsertObj(pCirc);
}
@@ -745,7 +759,12 @@
Point aCenter(rAct.GetRect().Center());
long nStart=GetAngle(rAct.GetStartPoint()-aCenter);
long nEnd=GetAngle(rAct.GetEndPoint()-aCenter);
SdrCircObj* pCirc=new SdrCircObj(OBJ_SECT,rAct.GetRect(),nStart,nEnd);
SdrCircObj* pCirc = new SdrCircObj(
*mpModel,
OBJ_SECT,
rAct.GetRect(),
nStart,
nEnd);
SetAttributes(pCirc);
InsertObj(pCirc);
}
@@ -755,7 +774,12 @@
Point aCenter(rAct.GetRect().Center());
long nStart=GetAngle(rAct.GetStartPoint()-aCenter);
long nEnd=GetAngle(rAct.GetEndPoint()-aCenter);
SdrCircObj* pCirc=new SdrCircObj(OBJ_CCUT,rAct.GetRect(),nStart,nEnd);
SdrCircObj* pCirc = new SdrCircObj(
*mpModel,
OBJ_CCUT,
rAct.GetRect(),
nStart,
nEnd);
SetAttributes(pCirc);
InsertObj(pCirc);
}
@@ -911,6 +935,7 @@
if(bCreateLineObject)
{
SdrPathObj* pPath = new SdrPathObj(
*mpModel,
aSource.isClosed() ? OBJ_POLY : OBJ_PLIN,
basegfx::B2DPolyPolygon(aSource));
mnLineWidth = nNewLineWidth;
@@ -942,7 +967,10 @@
{
// #i73407# make sure polygon is closed, it's a filled primitive
aSource.setClosed(true);
SdrPathObj* pPath = new SdrPathObj(OBJ_POLY, basegfx::B2DPolyPolygon(aSource));
SdrPathObj* pPath = new SdrPathObj(
*mpModel,
OBJ_POLY,
basegfx::B2DPolyPolygon(aSource));
SetAttributes(pPath);
InsertObj(pPath, false);
}
@@ -963,7 +991,10 @@
{
// #i73407# make sure polygon is closed, it's a filled primitive
aSource.setClosed(true);
SdrPathObj* pPath = new SdrPathObj(OBJ_POLY, aSource);
SdrPathObj* pPath = new SdrPathObj(
*mpModel,
OBJ_POLY,
aSource);
SetAttributes(pPath);
InsertObj(pPath, false);
}
@@ -990,7 +1021,10 @@
aPos.AdjustY( -nTextHeight );
tools::Rectangle aTextRect( aPos, aSize );
SdrRectObj* pText =new SdrRectObj( OBJ_TEXT, aTextRect );
SdrRectObj* pText = new SdrRectObj(
*mpModel,
OBJ_TEXT,
aTextRect);
pText->SetMergedItem ( makeSdrTextUpperDistItem (0));
pText->SetMergedItem ( makeSdrTextLowerDistItem (0));
@@ -1009,7 +1043,6 @@
pText->SetMergedItem( makeSdrTextAutoGrowWidthItem( true ) );
}
pText->SetModel(mpModel);
pText->SetLayer(mnLayer);
pText->NbcSetText( rStr );
SetAttributes( pText, true );
@@ -1059,7 +1092,10 @@
{
tools::Rectangle aRect(rAct.GetPoint(),rAct.GetBitmap().GetSizePixel());
aRect.AdjustRight( 1 ); aRect.AdjustBottom( 1 );
SdrGrafObj* pGraf=new SdrGrafObj(Graphic(rAct.GetBitmap()),aRect);
SdrGrafObj* pGraf = new SdrGrafObj(
*mpModel,
Graphic(rAct.GetBitmap()),
aRect);
// This action is not creating line and fill, set directly, do not use SetAttributes(..)
pGraf->SetMergedItem(XLineStyleItem(drawing::LineStyle_NONE));
@@ -1071,7 +1107,10 @@
{
tools::Rectangle aRect(rAct.GetPoint(),rAct.GetSize());
aRect.AdjustRight( 1 ); aRect.AdjustBottom( 1 );
SdrGrafObj* pGraf=new SdrGrafObj(Graphic(rAct.GetBitmap()),aRect);
SdrGrafObj* pGraf = new SdrGrafObj(
*mpModel,
Graphic(rAct.GetBitmap()),
aRect);
// This action is not creating line and fill, set directly, do not use SetAttributes(..)
pGraf->SetMergedItem(XLineStyleItem(drawing::LineStyle_NONE));
@@ -1083,7 +1122,10 @@
{
tools::Rectangle aRect(rAct.GetPoint(),rAct.GetBitmapEx().GetSizePixel());
aRect.AdjustRight( 1 ); aRect.AdjustBottom( 1 );
SdrGrafObj* pGraf=new SdrGrafObj( rAct.GetBitmapEx(), aRect );
SdrGrafObj* pGraf = new SdrGrafObj(
*mpModel,
rAct.GetBitmapEx(),
aRect);
// This action is not creating line and fill, set directly, do not use SetAttributes(..)
pGraf->SetMergedItem(XLineStyleItem(drawing::LineStyle_NONE));
@@ -1095,7 +1137,10 @@
{
tools::Rectangle aRect(rAct.GetPoint(),rAct.GetSize());
aRect.AdjustRight( 1 ); aRect.AdjustBottom( 1 );
SdrGrafObj* pGraf=new SdrGrafObj( rAct.GetBitmapEx(), aRect );
SdrGrafObj* pGraf = new SdrGrafObj(
*mpModel,
rAct.GetBitmapEx(),
aRect);
// This action is not creating line and fill, set directly, do not use SetAttributes(..)
pGraf->SetMergedItem(XLineStyleItem(drawing::LineStyle_NONE));
@@ -1117,7 +1162,10 @@
if(!mbLastObjWasPolyWithoutLine || !CheckLastPolyLineAndFillMerge(aSource))
{
const Hatch& rHatch = rAct.GetHatch();
SdrPathObj* pPath = new SdrPathObj(OBJ_POLY, aSource);
SdrPathObj* pPath = new SdrPathObj(
*mpModel,
OBJ_POLY,
aSource);
// #i125211# Use the ranges from the SdrObject to create a new empty SfxItemSet
SfxItemSet aHatchAttr(mpModel->GetItemPool(), pPath->GetMergedItemSet().GetRanges());
css::drawing::HatchStyle eStyle;
@@ -1207,7 +1255,10 @@
if(!mbLastObjWasPolyWithoutLine || !CheckLastPolyLineAndFillMerge(aSource))
{
const Gradient& rGrad = pAct->GetGradient();
SdrPathObj* pPath = new SdrPathObj(OBJ_POLY, aSource);
SdrPathObj* pPath = new SdrPathObj(
*mpModel,
OBJ_POLY,
aSource);
// #i125211# Use the ranges from the SdrObject to create a new empty SfxItemSet
SfxItemSet aGradAttr(mpModel->GetItemPool(), pPath->GetMergedItemSet().GetRanges());
XGradient aXGradient;
@@ -1275,7 +1326,10 @@
aRect.AdjustRight( 1 );
aRect.AdjustBottom( 1 );
aBitmap.Crop(tools::Rectangle(rAct.GetSrcPoint(), rAct.GetSrcSize()));
SdrGrafObj* pGraf = new SdrGrafObj(aBitmap, aRect);
SdrGrafObj* pGraf = new SdrGrafObj(
*mpModel,
aBitmap,
aRect);
// This action is not creating line and fill, set directly, do not use SetAttributes(..)
pGraf->SetMergedItem(XLineStyleItem(drawing::LineStyle_NONE));
@@ -1291,7 +1345,10 @@
aRect.AdjustRight( 1 );
aRect.AdjustBottom( 1 );
aBitmapEx.Crop(tools::Rectangle(rAct.GetSrcPoint(), rAct.GetSrcSize()));
SdrGrafObj* pGraf = new SdrGrafObj(aBitmapEx, aRect);
SdrGrafObj* pGraf = new SdrGrafObj(
*mpModel,
aBitmapEx,
aRect);
// This action is not creating line and fill, set directly, do not use SetAttributes(..)
pGraf->SetMergedItem(XLineStyleItem(drawing::LineStyle_NONE));
@@ -1305,7 +1362,10 @@
BitmapEx aBitmapEx(rAct.GetBitmap(), rAct.GetColor());
aRect.AdjustRight( 1 ); aRect.AdjustBottom( 1 );
SdrGrafObj* pGraf = new SdrGrafObj(aBitmapEx, aRect);
SdrGrafObj* pGraf = new SdrGrafObj(
*mpModel,
aBitmapEx,
aRect);
// This action is not creating line and fill, set directly, do not use SetAttributes(..)
pGraf->SetMergedItem(XLineStyleItem(drawing::LineStyle_NONE));
@@ -1319,7 +1379,10 @@
BitmapEx aBitmapEx(rAct.GetBitmap(), rAct.GetColor());
aRect.AdjustRight( 1 ); aRect.AdjustBottom( 1 );
SdrGrafObj* pGraf = new SdrGrafObj(aBitmapEx, aRect);
SdrGrafObj* pGraf = new SdrGrafObj(
*mpModel,
aBitmapEx,
aRect);
// This action is not creating line and fill, set directly, do not use SetAttributes(..)
pGraf->SetMergedItem(XLineStyleItem(drawing::LineStyle_NONE));
@@ -1334,7 +1397,10 @@
aRect.AdjustRight( 1 ); aRect.AdjustBottom( 1 );
aBitmapEx.Crop(tools::Rectangle(rAct.GetSrcPoint(), rAct.GetSrcSize()));
SdrGrafObj* pGraf = new SdrGrafObj(aBitmapEx, aRect);
SdrGrafObj* pGraf = new SdrGrafObj(
*mpModel,
aBitmapEx,
aRect);
// This action is not creating line and fill, set directly, do not use SetAttributes(..)
pGraf->SetMergedItem(XLineStyleItem(drawing::LineStyle_NONE));
@@ -1381,6 +1447,7 @@
aRange.transform(aTransform);
const Gradient& rGradient = rAct.GetGradient();
SdrRectObj* pRect = new SdrRectObj(
*mpModel,
tools::Rectangle(
floor(aRange.getMinX()),
floor(aRange.getMinY()),
@@ -1420,7 +1487,10 @@
aSource.transform(aTransform);
aSource.setClosed(true);
SdrPathObj* pPath = new SdrPathObj(OBJ_POLY, aSource);
SdrPathObj* pPath = new SdrPathObj(
*mpModel,
OBJ_POLY,
aSource);
SetAttributes(pPath);
pPath->SetMergedItem(XFillTransparenceItem(rAct.GetTransparence()));
InsertObj(pPath, false);
@@ -1439,7 +1509,10 @@
if(!mbLastObjWasPolyWithoutLine || !CheckLastPolyLineAndFillMerge(aSource))
{
const Gradient& rGradient = rAct.GetGradient();
SdrPathObj* pPath = new SdrPathObj(OBJ_POLY, aSource);
SdrPathObj* pPath = new SdrPathObj(
*mpModel,
OBJ_POLY,
aSource);
// #i125211# Use the ranges from the SdrObject to create a new empty SfxItemSet
SfxItemSet aGradientAttr(mpModel->GetItemPool(), pPath->GetMergedItemSet().GetRanges());
const css::awt::GradientStyle aXGradientStyle(getXGradientStyleFromGradientStyle(rGradient.GetStyle()));
@@ -1563,7 +1636,10 @@
}
// create and add object
SdrGrafObj* pGraf = new SdrGrafObj(aBitmapEx, aRect);
SdrGrafObj* pGraf = new SdrGrafObj(
*mpModel,
aBitmapEx,
aRect);
// for MetaFloatTransparentAction, do not use SetAttributes(...)
// since these metafile content is not used to draw line/fill
diff --git a/svx/source/svdraw/svdglev.cxx b/svx/source/svdraw/svdglev.cxx
index 64da87b..3bbd461 100644
--- a/svx/source/svdraw/svdglev.cxx
+++ b/svx/source/svdraw/svdglev.cxx
@@ -29,9 +29,10 @@
#include <svx/svdtrans.hxx>
#include <svx/svdobj.hxx>
SdrGlueEditView::SdrGlueEditView(SdrModel* pModel1, OutputDevice* pOut):
SdrPolyEditView(pModel1,pOut)
SdrGlueEditView::SdrGlueEditView(
SdrModel& rSdrModel,
OutputDevice* pOut)
: SdrPolyEditView(rSdrModel, pOut)
{
}
@@ -39,7 +40,6 @@
{
}
void SdrGlueEditView::ImpDoMarkedGluePoints(PGlueDoFunc pDoFunc, bool bConst, const void* p1, const void* p2, const void* p3, const void* p4)
{
const size_t nMarkCount=GetMarkedObjectCount();
diff --git a/svx/source/svdraw/svdhdl.cxx b/svx/source/svdraw/svdhdl.cxx
index 711a96e..b00b967 100644
--- a/svx/source/svdraw/svdhdl.cxx
+++ b/svx/source/svdraw/svdhdl.cxx
@@ -1351,8 +1351,8 @@
if(bSetItemOnObject)
{
SdrModel* pModel = _pObj->GetModel();
SfxItemSet aNewSet(pModel->GetItemPool());
SdrModel& rModel(_pObj->getSdrModelFromSdrObject());
SfxItemSet aNewSet(rModel.GetItemPool());
if(IsGradient())
{
@@ -1367,11 +1367,11 @@
aNewSet.Put(aNewTransItem);
}
if(bUndo && pModel->IsUndoEnabled())
if(bUndo && rModel.IsUndoEnabled())
{
pModel->BegUndo(SvxResId(IsGradient() ? SIP_XA_FILLGRADIENT : SIP_XA_FILLTRANSPARENCE));
pModel->AddUndo(pModel->GetSdrUndoFactory().CreateUndoAttrObject(*_pObj));
pModel->EndUndo();
rModel.BegUndo(SvxResId(IsGradient() ? SIP_XA_FILLGRADIENT : SIP_XA_FILLTRANSPARENCE));
rModel.AddUndo(rModel.GetSdrUndoFactory().CreateUndoAttrObject(*_pObj));
rModel.EndUndo();
}
pObj->SetMergedItemSetAndBroadcast(aNewSet);
diff --git a/svx/source/svdraw/svdmodel.cxx b/svx/source/svdraw/svdmodel.cxx
index 04d0f70..bb237ba 100644
--- a/svx/source/svdraw/svdmodel.cxx
+++ b/svx/source/svdraw/svdmodel.cxx
@@ -1323,7 +1323,7 @@
PageListChanged();
pPage->SetInserted();
pPage->SetPageNum(nPos);
pPage->SetModel(this);
if (nPos<nCount) bPagNumsDirty=true;
SetChanged();
SdrHint aHint(SdrHintKind::PageOrderChange, pPage);
@@ -1372,10 +1372,11 @@
MasterPageListChanged();
pPage->SetInserted();
pPage->SetPageNum(nPos);
pPage->SetModel(this);
if (nPos<nCount) {
bMPgNumsDirty=true;
}
SetChanged();
SdrHint aHint(SdrHintKind::PageOrderChange, pPage);
Broadcast(aHint);
@@ -1476,7 +1477,10 @@
if (!bMoveNoCopy)
{
const SdrPage* pPg1=GetPage(nPageNum2);
// Clone to local model
pPg=pPg1->Clone();
InsertPage(pPg,nDestNum);
if (bUndo)
AddUndo(GetSdrUndoFactory().CreateUndoCopyPage(*pPg));
@@ -1577,14 +1581,18 @@
if (pMasterMap && pMasterNeed && nMasterNeed!=0) {
for (sal_uInt16 i=nSrcMasterPageCnt; i>0;) {
i--;
if (pMasterNeed[i]) {
SdrPage* pPg=nullptr;
if (bTreadSourceAsConst) {
const SdrPage* pPg1=rSourceModel.GetMasterPage(i);
pPg=pPg1->Clone();
} else {
pPg=rSourceModel.RemoveMasterPage(i);
if (pMasterNeed[i])
{
// Always Clone to new model
const SdrPage* pPg1(rSourceModel.GetMasterPage(i));
SdrPage* pPg(pPg1->Clone(this));
if(!bTreadSourceAsConst)
{
// if requested, delete original/modify original model
delete rSourceModel.RemoveMasterPage(i);
}
if (pPg!=nullptr) {
// Now append all of them to the end of the DstModel.
// Don't use InsertMasterPage(), because everything is
@@ -1592,7 +1600,6 @@
maMaPag.insert(maMaPag.begin()+nDstMasterPageCnt, pPg);
MasterPageListChanged();
pPg->SetInserted();
pPg->SetModel(this);
bMPgNumsDirty=true;
if (bUndo) AddUndo(GetSdrUndoFactory().CreateUndoNewPage(*pPg));
} else {
@@ -1607,14 +1614,18 @@
sal_uInt16 nSourcePos=nFirstPageNum;
sal_uInt16 nMergeCount=sal_uInt16(std::abs(static_cast<long>(static_cast<long>(nFirstPageNum)-nLastPageNum))+1);
if (nDestPos>GetPageCount()) nDestPos=GetPageCount();
while (nMergeCount>0) {
SdrPage* pPg=nullptr;
if (bTreadSourceAsConst) {
const SdrPage* pPg1=rSourceModel.GetPage(nSourcePos);
pPg=pPg1->Clone();
} else {
pPg=rSourceModel.RemovePage(nSourcePos);
while (nMergeCount>0)
{
// Always Clone to new model
const SdrPage* pPg1(rSourceModel.GetPage(nSourcePos));
SdrPage* pPg(pPg1->Clone(this));
if(!bTreadSourceAsConst)
{
// if requested, delete original/modify original model
delete rSourceModel.RemovePage(nSourcePos);
}
if (pPg!=nullptr) {
InsertPage(pPg,nDestPos);
if (bUndo) AddUndo(GetSdrUndoFactory().CreateUndoNewPage(*pPg));
diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx
index 985b415..07a5b28 100644
--- a/svx/source/svdraw/svdmrkv.cxx
+++ b/svx/source/svdraw/svdmrkv.cxx
@@ -144,15 +144,17 @@
BrkMarkGluePoints();
}
SdrMarkView::SdrMarkView(SdrModel* pModel1, OutputDevice* pOut)
: SdrSnapView(pModel1,pOut),
SdrMarkView::SdrMarkView(
SdrModel& rSdrModel,
OutputDevice* pOut)
: SdrSnapView(rSdrModel, pOut),
mpMarkObjOverlay(nullptr),
mpMarkPointsOverlay(nullptr),
mpMarkGluePointsOverlay(nullptr),
maHdlList(this)
{
ImpClearVars();
StartListening(*pModel1);
StartListening(rSdrModel);
}
SdrMarkView::~SdrMarkView()
diff --git a/svx/source/svdraw/svdoashp.cxx b/svx/source/svdraw/svdoashp.cxx
index 70c9faf7..783c5e9 100644
--- a/svx/source/svdraw/svdoashp.cxx
+++ b/svx/source/svdraw/svdoashp.cxx
@@ -810,8 +810,8 @@
return new sdr::properties::CustomShapeProperties(*this);
}
SdrObjCustomShape::SdrObjCustomShape()
: SdrTextObj()
SdrObjCustomShape::SdrObjCustomShape(SdrModel& rSdrModel)
: SdrTextObj(rSdrModel)
, fObjectRotation(0.0)
, mbAdjustingTextFrameWidthAndHeight(false)
, mpLastShadowGeometry(nullptr)
@@ -1346,23 +1346,16 @@
}
}
void SdrObjCustomShape::SetModel(SdrModel* pNewModel)
{
SdrTextObj::SetModel(pNewModel);
mXRenderedCustomShape.clear();
}
sal_uInt16 SdrObjCustomShape::GetObjIdentifier() const
{
return sal_uInt16(OBJ_CUSTOMSHAPE);
}
// #115391# This implementation is based on the TextFrame size of the CustomShape and the
// state of the ResizeShapeToFitText flag to correctly set TextMinFrameWidth/Height
void SdrObjCustomShape::AdaptTextMinSize()
{
if (!pModel || (!pModel->IsCreatingDataObj() && !pModel->IsPasteResize()))
if (!getSdrModelFromSdrObject().IsCreatingDataObj() && !getSdrModelFromSdrObject().IsPasteResize())
{
const bool bResizeShapeToFitText(GetObjectItem(SDRATTR_TEXT_AUTOGROWHEIGHT).GetValue());
SfxItemSet aSet(
@@ -2232,7 +2225,7 @@
{
// Either we have text or the application has native text and suggested its size to us.
bool bHasText = HasText() || (m_aSuggestedTextFrameSize.Width() != 0 && m_aSuggestedTextFrameSize.Height() != 0);
if ( pModel && bHasText && !rR.IsEmpty() )
if ( bHasText && !rR.IsEmpty() )
{
bool bWdtGrow=bWdt && IsAutoGrowWidth();
bool bHgtGrow=bHgt && IsAutoGrowHeight();
@@ -2243,7 +2236,7 @@
long nWdt=0,nMinWdt=0,nMaxWdt=0;
Size aSiz(rR.GetSize()); aSiz.AdjustWidth( -1 ); aSiz.AdjustHeight( -1 );
Size aMaxSiz(100000,100000);
Size aTmpSiz(pModel->GetMaxObjSize());
Size aTmpSiz(getSdrModelFromSdrObject().GetMaxObjSize());
if (aTmpSiz.Width()!=0) aMaxSiz.setWidth(aTmpSiz.Width() );
if (aTmpSiz.Height()!=0) aMaxSiz.setHeight(aTmpSiz.Height() );
if (bWdtGrow)
@@ -2499,8 +2492,8 @@
Size aAnkSiz(aViewInit.GetSize());
aAnkSiz.AdjustWidth( -1 ); aAnkSiz.AdjustHeight( -1 ); // because GetSize() adds 1
Size aMaxSiz(1000000,1000000);
if (pModel!=nullptr) {
Size aTmpSiz(pModel->GetMaxObjSize());
{
Size aTmpSiz(getSdrModelFromSdrObject().GetMaxObjSize());
if (aTmpSiz.Width()!=0) aMaxSiz.setWidth(aTmpSiz.Width() );
if (aTmpSiz.Height()!=0) aMaxSiz.setHeight(aTmpSiz.Height() );
}
@@ -2646,11 +2639,9 @@
if (pPara)
{
bool bHitTest = false;
if( pModel )
bHitTest = &pModel->GetHitTestOutliner() == &rOutliner;
bool bHitTest(&getSdrModelFromSdrObject().GetHitTestOutliner() == &rOutliner);
const SdrTextObj* pTestObj = rOutliner.GetTextObj();
if( !pTestObj || !bHitTest || pTestObj != this ||
pTestObj->GetOutlinerParaObject() != GetOutlinerParaObject() )
{
@@ -2746,9 +2737,9 @@
InvalidateRenderGeometry();
}
SdrObjCustomShape* SdrObjCustomShape::Clone() const
SdrObjCustomShape* SdrObjCustomShape::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< SdrObjCustomShape >();
return CloneHelper< SdrObjCustomShape >(pTargetModel);
}
SdrObjCustomShape& SdrObjCustomShape::operator=(const SdrObjCustomShape& rObj)
@@ -2815,9 +2806,9 @@
if ( pRenderedCustomShape )
{
// Clone to same SdrModel
SdrObject* pCandidate = pRenderedCustomShape->Clone();
DBG_ASSERT(pCandidate, "SdrObjCustomShape::DoConvertToPolyObj: Could not clone SdrObject (!)");
pCandidate->SetModel(GetModel());
pRetval = pCandidate->DoConvertToPolyObj(bBezier, bAddText);
SdrObject::Free( pCandidate );
@@ -2948,7 +2939,7 @@
}
// if anchor is used, make position relative to it
if( pModel && pModel->IsWriter() )
if(getSdrModelFromSdrObject().IsWriter())
{
if(GetAnchorPos().X() || GetAnchorPos().Y())
{
@@ -3065,7 +3056,7 @@
basegfx::B2DTuple aTranslate(aRectangle.Left(), aRectangle.Top());
// position may be relative to anchorpos, convert
if( pModel && pModel->IsWriter() )
if(getSdrModelFromSdrObject().IsWriter())
{
if(GetAnchorPos().X() || GetAnchorPos().Y())
{
diff --git a/svx/source/svdraw/svdoattr.cxx b/svx/source/svdraw/svdoattr.cxx
index 1f118f8..f33a47e 100644
--- a/svx/source/svdraw/svdoattr.cxx
+++ b/svx/source/svdraw/svdoattr.cxx
@@ -80,7 +80,8 @@
}
SdrAttrObj::SdrAttrObj()
SdrAttrObj::SdrAttrObj(SdrModel& rSdrModel)
: SdrObject(rSdrModel)
{
}
@@ -99,26 +100,7 @@
return maSnapRect;
}
void SdrAttrObj::SetModel(SdrModel* pNewModel)
{
SdrModel* pOldModel = pModel;
// test for correct pool in ItemSet; move to new pool if necessary
if(pNewModel && &GetObjectItemPool() != &pNewModel->GetItemPool())
{
MigrateItemPool(&GetObjectItemPool(), &pNewModel->GetItemPool(), pNewModel);
}
// call parent
SdrObject::SetModel(pNewModel);
// modify properties
GetProperties().SetModel(pOldModel, pNewModel);
}
// syntactical sugar for ItemSet accesses
void SdrAttrObj::Notify(SfxBroadcaster& /*rBC*/, const SfxHint& rHint)
{
bool bDataChg(SfxHintId::DataChanged == rHint.GetId());
diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx
index 6726c2e..29b66b5 100644
--- a/svx/source/svdraw/svdobj.cxx
+++ b/svx/source/svdraw/svdobj.cxx
@@ -226,6 +226,10 @@
{
if(!mpProperties)
{
// CAUTION(!) Do *not* call this during SdrObject construction,
// that will lead to wrong type-casts (dependent on costructor-level)
// and thus eventually create the wrong sdr::properties (!). Is there
// a way to check if on the stack is a SdrObject-constructor (?)
const_cast< SdrObject* >(this)->mpProperties.reset(
const_cast< SdrObject* >(this)->CreateObjectSpecificProperties() );
}
@@ -284,10 +288,10 @@
}
SdrObject::SdrObject() :
mpFillGeometryDefiningShape(nullptr)
SdrObject::SdrObject(SdrModel& rSdrModel)
: mpFillGeometryDefiningShape(nullptr)
,mrSdrModelFromSdrObject(rSdrModel)
,pPage(nullptr)
,pModel(nullptr)
,pUserCall(nullptr)
,pPlusData(nullptr)
,mpImpl(new Impl)
@@ -343,22 +347,7 @@
// when they get called from ObjectInDestruction().
mpImpl->maObjectUsers.clear();
try
{
SvxShape* pSvxShape = getSvxShape();
if ( pSvxShape )
{
OSL_ENSURE(!pSvxShape->HasSdrObjectOwnership(),"Please check where this call come from and replace it with SdrObject::Free");
pSvxShape->InvalidateSdrObject();
uno::Reference< lang::XComponent > xShapeComp( getWeakUnoShape(), uno::UNO_QUERY_THROW );
xShapeComp->dispose();
}
}
catch( const uno::Exception& )
{
DBG_UNHANDLED_EXCEPTION("svx");
}
// UserCall
SendUserCall(SdrUserCallType::Delete, GetLastBoundRect());
o3tl::reset_preserve_ptr_during(pPlusData);
@@ -370,14 +359,38 @@
void SdrObject::Free( SdrObject*& _rpObject )
{
SdrObject* pObject = _rpObject; _rpObject = nullptr;
if ( pObject == nullptr )
if(nullptr == pObject)
{
// nothing to do
return;
}
SvxShape* pShape = pObject->getSvxShape();
if ( pShape && pShape->HasSdrObjectOwnership() )
// only the shape is allowed to delete me, and will reset the ownership before doing so
return;
SvxShape* pShape(pObject->getSvxShape());
if(pShape)
{
if(pShape->HasSdrObjectOwnership())
{
// only the SvxShape is allowed to delete me, and will reset
// the ownership before doing so
return;
}
else
{
// not only delete pObject, but also need to dispose uno shape
try
{
pShape->InvalidateSdrObject();
uno::Reference< lang::XComponent > xShapeComp( pObject->getWeakUnoShape(), uno::UNO_QUERY_THROW );
xShapeComp->dispose();
}
catch( const uno::Exception& )
{
DBG_UNHANDLED_EXCEPTION("svx");
}
}
}
delete pObject;
}
@@ -393,28 +406,6 @@
}
}
void SdrObject::SetModel(SdrModel* pNewModel)
{
if(pNewModel && pPage)
{
if(pPage->GetModel() != pNewModel)
{
pPage = nullptr;
}
}
// update listeners at possible API wrapper object
if( pModel != pNewModel )
{
SvxShape* pShape = getSvxShape();
if( pShape )
pShape->ChangeModel( pNewModel );
}
pModel = pNewModel;
}
void SdrObject::SetObjList(SdrObjList* pNewObjList)
{
pObjList=pNewObjList;
@@ -423,16 +414,23 @@
void SdrObject::SetPage(SdrPage* pNewPage)
{
SdrModel* pOldModel = pModel;
SdrPage* pOldPage = pPage;
SdrModel* pOldModel(&getSdrModelFromSdrObject());
SdrPage* pOldPage(pPage);
pPage=pNewPage;
if (pPage!=nullptr)
{
SdrModel* pMod=pPage->GetModel();
if (pMod!=pModel && pMod!=nullptr)
SetModel(pMod);
}
pPage = pNewPage;
// TTTT Possibility here to add a warning for the future -> SdrModel
// of SdrObject (this) and SdrPage it it added to *have* to have the
// same SdrModel
// if(nullptr != pPage)
// {
// SdrModel* pMod(&pPage->getSdrModelFromSdrPage());
//
// if(pMod != &getSdrModelFromSdrObject())
// {
// SetModel(pMod);
// }
// }
// The creation of the UNO shape in SdrObject::getUnoShape is influenced
// by pPage, so when the page changes we need to discard the cached UNO
@@ -440,7 +438,14 @@
// If the page is changing to another page with the same model, we
// assume they create compatible UNO shape objects so we shouldn't have
// to invalidate.
if (pOldPage != pPage && !(pOldPage && pPage && pOldModel == pModel))
// TTTT: This causes quite some problems in SvxDrawPage::add when used
// e.g. from Writer - the SdrObject may be cloned to target model, and
// the xShape was added to it by purpose (see there). Thus it will be
// good to think about if this is really needed - it *seems* to be intended
// for a xShape being a on-demand-creatable resource - wit hthe argument that
// the SdrPage/UnoPage used influences the SvxShape creation. This uses
// ressources and would be nice to get rid of anyways.
if (pOldPage != pPage && !(pOldPage && pPage && pOldModel == &getSdrModelFromSdrObject()))
{
SvxShape* const pShape(getSvxShape());
if (pShape && !pShape->HasSdrObjectOwnership())
@@ -512,13 +517,9 @@
return mpImpl->meRelativeHeightRelation;
}
SfxItemPool & SdrObject::GetObjectItemPool() const
SfxItemPool& SdrObject::GetObjectItemPool() const
{
if(pModel)
return pModel->GetItemPool();
// use a static global default pool
return SdrObject::GetGlobalDrawObjectItemPool();
return getSdrModelFromSdrObject().GetItemPool();
}
SdrInventor SdrObject::GetObjInventor() const
@@ -636,7 +637,7 @@
{
// Undo/Redo for setting object's name (#i73249#)
bool bUndo( false );
if ( GetModel() && GetModel()->IsUndoEnabled() )
if ( getSdrModelFromSdrObject().IsUndoEnabled() )
{
bUndo = true;
SdrUndoAction* pUndoAction =
@@ -645,14 +646,14 @@
SdrUndoObjStrAttr::ObjStrAttrType::Name,
GetName(),
rStr );
GetModel()->BegUndo( pUndoAction->GetComment() );
GetModel()->AddUndo( pUndoAction );
getSdrModelFromSdrObject().BegUndo( pUndoAction->GetComment() );
getSdrModelFromSdrObject().AddUndo( pUndoAction );
}
pPlusData->aObjName = rStr;
// Undo/Redo for setting object's name (#i73249#)
if ( bUndo )
{
GetModel()->EndUndo();
getSdrModelFromSdrObject().EndUndo();
}
SetChanged();
BroadcastObjectChange();
@@ -680,7 +681,7 @@
{
// Undo/Redo for setting object's title (#i73249#)
bool bUndo( false );
if ( GetModel() && GetModel()->IsUndoEnabled() )
if ( getSdrModelFromSdrObject().IsUndoEnabled() )
{
bUndo = true;
SdrUndoAction* pUndoAction =
@@ -689,14 +690,14 @@
SdrUndoObjStrAttr::ObjStrAttrType::Title,
GetTitle(),
rStr );
GetModel()->BegUndo( pUndoAction->GetComment() );
GetModel()->AddUndo( pUndoAction );
getSdrModelFromSdrObject().BegUndo( pUndoAction->GetComment() );
getSdrModelFromSdrObject().AddUndo( pUndoAction );
}
pPlusData->aObjTitle = rStr;
// Undo/Redo for setting object's title (#i73249#)
if ( bUndo )
{
GetModel()->EndUndo();
getSdrModelFromSdrObject().EndUndo();
}
SetChanged();
BroadcastObjectChange();
@@ -724,7 +725,7 @@
{
// Undo/Redo for setting object's description (#i73249#)
bool bUndo( false );
if ( GetModel() && GetModel()->IsUndoEnabled() )
if ( getSdrModelFromSdrObject().IsUndoEnabled() )
{
bUndo = true;
SdrUndoAction* pUndoAction =
@@ -733,14 +734,14 @@
SdrUndoObjStrAttr::ObjStrAttrType::Description,
GetDescription(),
rStr );
GetModel()->BegUndo( pUndoAction->GetComment() );
GetModel()->AddUndo( pUndoAction );
getSdrModelFromSdrObject().BegUndo( pUndoAction->GetComment() );
getSdrModelFromSdrObject().AddUndo( pUndoAction );
}
pPlusData->aObjDescription = rStr;
// Undo/Redo for setting object's description (#i73249#)
if ( bUndo )
{
GetModel()->EndUndo();
getSdrModelFromSdrObject().EndUndo();
}
SetChanged();
BroadcastObjectChange();
@@ -835,7 +836,7 @@
void SdrObject::RecalcBoundRect()
{
// #i101680# suppress BoundRect calculations on import(s)
if ((pModel && pModel->isLocked()) || utl::ConfigManager::IsFuzzing())
if ((getSdrModelFromSdrObject().isLocked()) || utl::ConfigManager::IsFuzzing())
return;
// central new method which will calculate the BoundRect using primitive geometry
@@ -865,7 +866,7 @@
void SdrObject::BroadcastObjectChange() const
{
if ((pModel && pModel->isLocked()) || utl::ConfigManager::IsFuzzing())
if ((getSdrModelFromSdrObject().isLocked()) || utl::ConfigManager::IsFuzzing())
return;
if (mbDelayBroadcastObjectChange)
@@ -875,7 +876,7 @@
}
bool bPlusDataBroadcast(pPlusData && pPlusData->pBroadcast);
bool bObjectChange(IsInserted() && pModel);
bool bObjectChange(IsInserted());
if(bPlusDataBroadcast || bObjectChange)
{
@@ -888,7 +889,7 @@
if(bObjectChange)
{
pModel->Broadcast(aHint);
getSdrModelFromSdrObject().Broadcast(aHint);
}
}
}
@@ -899,9 +900,13 @@
// notification now.
ActionChanged();
if(IsInserted() && pModel)
// TTTT Need to check meaning/usage of IsInserted in one
// of the next changes. It should not mean to have a SdrModel
// set (this is guaranteed now), but should be connected to
// being added to a SdrPage (?)
if(IsInserted())
{
pModel->SetChanged();
getSdrModelFromSdrObject().SetChanged();
}
}
@@ -929,9 +934,9 @@
return false;
}
SdrObject* SdrObject::Clone() const
SdrObject* SdrObject::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< SdrObject >();
return CloneHelper< SdrObject >(pTargetModel);
}
SdrObject& SdrObject::operator=(const SdrObject& rObj)
@@ -947,7 +952,6 @@
// draw object, an SdrObject needs to be provided, as in the normal constructor.
mpProperties.reset( &rObj.GetProperties().Clone(*this) );
pModel =rObj.pModel;
pPage = rObj.pPage;
aOutRect=rObj.aOutRect;
mnLayerID = rObj.mnLayerID;
@@ -1021,19 +1025,9 @@
pPlusData.reset( new SdrObjPlusData );
}
OUString SdrObject::GetAngleStr(long nAngle) const
{
if (pModel!=nullptr)
return SdrModel::GetAngleString(nAngle);
return OUString();
}
OUString SdrObject::GetMetrStr(long nVal) const
{
if (pModel!=nullptr)
return pModel->GetMetricString(nVal);
return OUString();
return getSdrModelFromSdrObject().GetMetricString(nVal);
}
basegfx::B2DPolyPolygon SdrObject::TakeXorPoly() const
@@ -2054,16 +2048,16 @@
if (rAttr.GetItemState(SDRATTR_LAYERID,true,&pPoolItem)==SfxItemState::SET) {
nLayer=static_cast<const SdrLayerIdItem*>(pPoolItem)->GetValue();
}
if (rAttr.GetItemState(SDRATTR_LAYERNAME,true,&pPoolItem)==SfxItemState::SET && pModel!=nullptr) {
OUString aLayerName=static_cast<const SdrLayerNameItem*>(pPoolItem)->GetValue();
const SdrLayerAdmin* pLayAd=pPage!=nullptr ? &pPage->GetLayerAdmin() : pModel!=nullptr ? &pModel->GetLayerAdmin() : nullptr;
if (pLayAd!=nullptr) {
const SdrLayer* pLayer=pLayAd->GetLayer(aLayerName);
if (pLayer!=nullptr) {
nLayer=pLayer->GetID();
}
}
if (rAttr.GetItemState(SDRATTR_LAYERNAME,true,&pPoolItem)==SfxItemState::SET)
{
OUString aLayerName = static_cast<const SdrLayerNameItem*>(pPoolItem)->GetValue();
const SdrLayerAdmin& rLayAd(nullptr != pPage ? pPage->GetLayerAdmin() : getSdrModelFromSdrObject().GetLayerAdmin());
const SdrLayer* pLayer = rLayAd.GetLayer(aLayerName);
if(nullptr != pLayer)
{
nLayer=pLayer->GetID();
}
}
if (nLayer!=SDRLAYER_NOTFOUND) {
NbcSetLayer(nLayer);
@@ -2126,12 +2120,11 @@
}
rAttr.Put(SdrLayerIdItem(GetLayer()));
const SdrLayerAdmin* pLayAd=pPage!=nullptr ? &pPage->GetLayerAdmin() : pModel!=nullptr ? &pModel->GetLayerAdmin() : nullptr;
if (pLayAd!=nullptr) {
const SdrLayer* pLayer=pLayAd->GetLayerPerID(GetLayer());
if (pLayer!=nullptr) {
rAttr.Put(SdrLayerNameItem(pLayer->GetName()));
}
const SdrLayerAdmin& rLayAd(nullptr != pPage ? pPage->GetLayerAdmin() : getSdrModelFromSdrObject().GetLayerAdmin());
const SdrLayer* pLayer = rLayAd.GetLayerPerID(GetLayer());
if(nullptr != pLayer)
{
rAttr.Put(SdrLayerNameItem(pLayer->GetName()));
}
Point aRef1(rSnap.Center());
Point aRef2(aRef1); aRef2.AdjustY( 1 );
@@ -2309,15 +2302,15 @@
}
SdrObject* SdrObject::ImpConvertToContourObj(SdrObject* pRet, bool bForceLineDash)
SdrObject* SdrObject::ImpConvertToContourObj(bool bForceLineDash)
{
bool bNoChange(true);
SdrObject* pRetval(nullptr);
if(pRet->LineGeometryUsageIsNecessary())
if(LineGeometryUsageIsNecessary())
{
basegfx::B2DPolyPolygon aMergedLineFillPolyPolygon;
basegfx::B2DPolyPolygon aMergedHairlinePolyPolygon;
const drawinglayer::primitive2d::Primitive2DContainer xSequence(pRet->GetViewContact().getViewIndependentPrimitive2DContainer());
const drawinglayer::primitive2d::Primitive2DContainer xSequence(GetViewContact().getViewIndependentPrimitive2DContainer());
if(!xSequence.empty())
{
@@ -2345,7 +2338,7 @@
if(aMergedLineFillPolyPolygon.count() || (bForceLineDash && aMergedHairlinePolyPolygon.count()))
{
SfxItemSet aSet(pRet->GetMergedItemSet());
SfxItemSet aSet(GetMergedItemSet());
drawing::FillStyle eOldFillStyle = aSet.Get(XATTR_FILLSTYLE).GetValue();
SdrPathObj* aLinePolygonPart = nullptr;
SdrPathObj* aLineHairlinePart = nullptr;
@@ -2354,8 +2347,10 @@
if(aMergedLineFillPolyPolygon.count())
{
// create SdrObject for filled line geometry
aLinePolygonPart = new SdrPathObj(OBJ_PATHFILL, aMergedLineFillPolyPolygon);
aLinePolygonPart->SetModel(pRet->GetModel());
aLinePolygonPart = new SdrPathObj(
getSdrModelFromSdrObject(),
OBJ_PATHFILL,
aMergedLineFillPolyPolygon);
// correct item properties
aSet.Put(XLineWidthItem(0));
@@ -2375,8 +2370,10 @@
// OBJ_PATHLINE is necessary here, not OBJ_PATHFILL. This is intended
// to get a non-filled object. If the poly is closed, the PathObj takes care for
// the correct closed state.
aLineHairlinePart = new SdrPathObj(OBJ_PATHLINE, aMergedHairlinePolyPolygon);
aLineHairlinePart->SetModel(pRet->GetModel());
aLineHairlinePart = new SdrPathObj(
getSdrModelFromSdrObject(),
OBJ_PATHLINE,
aMergedHairlinePolyPolygon);
aSet.Put(XLineWidthItem(0));
aSet.Put(XFillStyleItem(drawing::FillStyle_NONE));
@@ -2396,7 +2393,7 @@
// check if original geometry should be added (e.g. filled and closed)
bool bAddOriginalGeometry(false);
SdrPathObj* pPath = dynamic_cast<SdrPathObj*>( pRet );
SdrPathObj* pPath = dynamic_cast<SdrPathObj*>(this);
if(pPath && pPath->IsClosed())
{
@@ -2409,20 +2406,17 @@
// do we need a group?
if(bBuildGroup || bAddOriginalGeometry)
{
SdrObject* pGroup = new SdrObjGroup;
pGroup->SetModel(pRet->GetModel());
SdrObject* pGroup = new SdrObjGroup(getSdrModelFromSdrObject());
if(bAddOriginalGeometry)
{
// Add a clone of the original geometry.
aSet.ClearItem();
aSet.Put(pRet->GetMergedItemSet());
aSet.Put(GetMergedItemSet());
aSet.Put(XLineStyleItem(drawing::LineStyle_NONE));
aSet.Put(XLineWidthItem(0));
SdrObject* pClone = pRet->Clone();
pClone->SetModel(pRet->GetModel());
SdrObject* pClone = Clone();
pClone->SetMergedItemSet(aSet);
pGroup->GetSubList()->NbcInsertObject(pClone);
@@ -2438,38 +2432,30 @@
pGroup->GetSubList()->NbcInsertObject(aLineHairlinePart);
}
pRet = pGroup;
// be more careful with the state describing bool
bNoChange = false;
pRetval = pGroup;
}
else
{
if(aLinePolygonPart)
{
pRet = aLinePolygonPart;
// be more careful with the state describing bool
bNoChange = false;
pRetval = aLinePolygonPart;
}
else if(aLineHairlinePart)
{
pRet = aLineHairlinePart;
// be more careful with the state describing bool
bNoChange = false;
pRetval = aLineHairlinePart;
}
}
}
}
if(bNoChange)
if(nullptr == pRetval)
{
// due to current method usage, create and return a clone when nothing has changed
SdrObject* pClone = pRet->Clone();
pClone->SetModel(pRet->GetModel());
pRet = pClone;
SdrObject* pClone = Clone();
pRetval = pClone;
}
return pRet;
return pRetval;
}
@@ -2497,8 +2483,7 @@
if(dynamic_cast<const SdrObjGroup*>( pRet) != nullptr)
{
SdrObjList* pObjList2 = pRet->GetSubList();
SdrObject* pGroup = new SdrObjGroup;
pGroup->SetModel(pRet->GetModel());
SdrObject* pGroup = new SdrObjGroup(getSdrModelFromSdrObject());
for(size_t a=0; a<pObjList2->GetObjCount(); ++a)
{
@@ -2518,7 +2503,7 @@
pPathObj->SetPathPoly(basegfx::utils::simplifyCurveSegments(pPathObj->GetPathPoly()));
}
pRet = ImpConvertToContourObj(pRet, bForceLineDash);
pRet = pRet->ImpConvertToContourObj(bForceLineDash);
}
// #i73441# preserve LayerID
@@ -2601,10 +2586,10 @@
{
bNoPrint=!bPrn;
SetChanged();
if (IsInserted() && pModel!=nullptr)
if (IsInserted())
{
SdrHint aHint(SdrHintKind::ObjectChange, *this);
pModel->Broadcast(aHint);
getSdrModelFromSdrObject().Broadcast(aHint);
}
}
}
@@ -2615,10 +2600,10 @@
{
mbVisible = bVisible;
SetChanged();
if (IsInserted() && pModel!=nullptr)
if (IsInserted())
{
SdrHint aHint(SdrHintKind::ObjectChange, *this);
pModel->Broadcast(aHint);
getSdrModelFromSdrObject().Broadcast(aHint);
}
}
}
@@ -2744,15 +2729,6 @@
}
}
// change ItemPool for this object
void SdrObject::MigrateItemPool(SfxItemPool* pSrcPool, SfxItemPool* pDestPool, SdrModel* pNewModel)
{
if(pSrcPool && pDestPool && (pSrcPool != pDestPool))
{
GetProperties().MoveToItemPool(pSrcPool, pDestPool, pNewModel);
}
}
void SdrObject::impl_setUnoShape( const uno::Reference< uno::XInterface >& _rxUnoShape )
{
const uno::Reference< uno::XInterface>& xOldUnoShape( maWeakUnoShape );
@@ -2882,7 +2858,7 @@
basegfx::B2DTuple aTranslate(aRectangle.Left(), aRectangle.Top());
// position maybe relative to anchorpos, convert
if( pModel && pModel->IsWriter() )
if(getSdrModelFromSdrObject().IsWriter())
{
if(GetAnchorPos().X() || GetAnchorPos().Y())
{
@@ -2966,7 +2942,7 @@
}
// if anchor is used, make position relative to it
if( pModel && pModel->IsWriter() )
if(getSdrModelFromSdrObject().IsWriter())
{
if(GetAnchorPos().X() || GetAnchorPos().Y())
{
@@ -2985,9 +2961,7 @@
// Give info if object is in destruction
bool SdrObject::IsInDestruction() const
{
if(pModel)
return pModel->IsInDestruction();
return false;
return getSdrModelFromSdrObject().IsInDestruction();
}
// return if fill is != drawing::FillStyle_NONE
@@ -3056,9 +3030,9 @@
}
SdrObject* SdrObjFactory::CreateObjectFromFactory( SdrInventor nInventor, sal_uInt16 nObjIdentifier )
SdrObject* SdrObjFactory::CreateObjectFromFactory(SdrModel& rSdrModel, SdrInventor nInventor, sal_uInt16 nObjIdentifier)
{
SdrObjCreatorParams aParams { nInventor, nObjIdentifier };
SdrObjCreatorParams aParams { nInventor, nObjIdentifier, rSdrModel };
for (const auto & i : ImpGetUserMakeObjHdl()) {
SdrObject* pObj = i.Call(aParams);
if (pObj) {
@@ -3068,78 +3042,15 @@
return nullptr;
}
SdrObject* SdrObjFactory::MakeNewObject(SdrInventor nInvent, sal_uInt16 nIdent, SdrPage* pPage, SdrModel* pModel)
{
if (!pModel && pPage)
pModel = pPage->GetModel();
SdrObject* pObj = nullptr;
if (nInvent == SdrInventor::Default)
{
switch (nIdent)
{
case sal_uInt16(OBJ_NONE ): pObj=new SdrObject; break;
case sal_uInt16(OBJ_GRUP ): pObj=new SdrObjGroup; break;
case sal_uInt16(OBJ_LINE ): pObj=new SdrPathObj(OBJ_LINE ); break;
case sal_uInt16(OBJ_POLY ): pObj=new SdrPathObj(OBJ_POLY ); break;
case sal_uInt16(OBJ_PLIN ): pObj=new SdrPathObj(OBJ_PLIN ); break;
case sal_uInt16(OBJ_PATHLINE ): pObj=new SdrPathObj(OBJ_PATHLINE ); break;
case sal_uInt16(OBJ_PATHFILL ): pObj=new SdrPathObj(OBJ_PATHFILL ); break;
case sal_uInt16(OBJ_FREELINE ): pObj=new SdrPathObj(OBJ_FREELINE ); break;
case sal_uInt16(OBJ_FREEFILL ): pObj=new SdrPathObj(OBJ_FREEFILL ); break;
case sal_uInt16(OBJ_PATHPOLY ): pObj=new SdrPathObj(OBJ_POLY ); break;
case sal_uInt16(OBJ_PATHPLIN ): pObj=new SdrPathObj(OBJ_PLIN ); break;
case sal_uInt16(OBJ_EDGE ): pObj=new SdrEdgeObj; break;
case sal_uInt16(OBJ_RECT ): pObj=new SdrRectObj; break;
case sal_uInt16(OBJ_CIRC ): pObj=new SdrCircObj(OBJ_CIRC ); break;
case sal_uInt16(OBJ_SECT ): pObj=new SdrCircObj(OBJ_SECT ); break;
case sal_uInt16(OBJ_CARC ): pObj=new SdrCircObj(OBJ_CARC ); break;
case sal_uInt16(OBJ_CCUT ): pObj=new SdrCircObj(OBJ_CCUT ); break;
case sal_uInt16(OBJ_TEXT ): pObj=new SdrRectObj(OBJ_TEXT ); break;
case sal_uInt16(OBJ_TEXTEXT ): pObj=new SdrRectObj(OBJ_TEXTEXT ); break;
case sal_uInt16(OBJ_TITLETEXT ): pObj=new SdrRectObj(OBJ_TITLETEXT ); break;
case sal_uInt16(OBJ_OUTLINETEXT): pObj=new SdrRectObj(OBJ_OUTLINETEXT); break;
case sal_uInt16(OBJ_MEASURE ): pObj=new SdrMeasureObj; break;
case sal_uInt16(OBJ_GRAF ): pObj=new SdrGrafObj; break;
case sal_uInt16(OBJ_OLE2 ): pObj=new SdrOle2Obj; break;
case sal_uInt16(OBJ_FRAME ): pObj=new SdrOle2Obj(true); break;
case sal_uInt16(OBJ_CAPTION ): pObj=new SdrCaptionObj; break;
case sal_uInt16(OBJ_PAGE ): pObj=new SdrPageObj; break;
case sal_uInt16(OBJ_UNO ): pObj=new SdrUnoObj(OUString()); break;
case sal_uInt16(OBJ_CUSTOMSHAPE ): pObj=new SdrObjCustomShape(); break;
#if HAVE_FEATURE_AVMEDIA
case sal_uInt16(OBJ_MEDIA ): pObj=new SdrMediaObj(); break;
#endif
case sal_uInt16(OBJ_TABLE ): pObj=new sdr::table::SdrTableObj(pModel); break;
}
}
if (!pObj)
pObj = CreateObjectFromFactory(nInvent, nIdent);
if (!pObj)
{
// Well, if no one wants it...
return nullptr;
}
if (pPage)
pObj->SetPage(pPage);
else if (pModel)
pObj->SetModel(pModel);
return pObj;
}
SdrObject* SdrObjFactory::MakeNewObject(
SdrInventor nInventor, sal_uInt16 nIdentifier, const tools::Rectangle& rSnapRect, SdrPage* pPage )
SdrModel& rSdrModel,
SdrInventor nInventor,
sal_uInt16 nIdentifier,
SdrPage* pPage,
const tools::Rectangle* pSnapRect)
{
SdrModel* pModel = pPage ? pPage->GetModel() : nullptr;
SdrObject* pObj = nullptr;
bool bSetSnapRect = true;
SdrObject* pObj(nullptr);
bool bSetSnapRect(nullptr != pSnapRect);
if (nInventor == SdrInventor::Default)
{
@@ -3147,15 +3058,44 @@
{
case OBJ_MEASURE:
{
pObj = new SdrMeasureObj(rSnapRect.TopLeft(), rSnapRect.BottomRight());
if(nullptr != pSnapRect)
{
pObj = new SdrMeasureObj(
rSdrModel,
pSnapRect->TopLeft(),
pSnapRect->BottomRight());
}
else
{
pObj = new SdrMeasureObj(rSdrModel);
}
}
break;
case OBJ_LINE:
{
basegfx::B2DPolygon aPoly;
aPoly.append(basegfx::B2DPoint(rSnapRect.Left(), rSnapRect.Top()));
aPoly.append(basegfx::B2DPoint(rSnapRect.Right(), rSnapRect.Bottom()));
pObj = new SdrPathObj(OBJ_LINE, basegfx::B2DPolyPolygon(aPoly));
if(nullptr != pSnapRect)
{
basegfx::B2DPolygon aPoly;
aPoly.append(
basegfx::B2DPoint(
pSnapRect->Left(),
pSnapRect->Top()));
aPoly.append(
basegfx::B2DPoint(
pSnapRect->Right(),
pSnapRect->Bottom()));
pObj = new SdrPathObj(
rSdrModel,
OBJ_LINE,
basegfx::B2DPolyPolygon(aPoly));
}
else
{
pObj = new SdrPathObj(
rSdrModel,
OBJ_LINE);
}
}
break;
case OBJ_TEXT:
@@ -3163,8 +3103,20 @@
case OBJ_TITLETEXT:
case OBJ_OUTLINETEXT:
{
pObj = new SdrRectObj(static_cast<SdrObjKind>(nIdentifier), rSnapRect);
bSetSnapRect = false;
if(nullptr != pSnapRect)
{
pObj = new SdrRectObj(
rSdrModel,
static_cast<SdrObjKind>(nIdentifier),
*pSnapRect);
bSetSnapRect = false;
}
else
{
pObj = new SdrRectObj(
rSdrModel,
static_cast<SdrObjKind>(nIdentifier));
}
}
break;
case OBJ_CIRC:
@@ -3172,38 +3124,52 @@
case OBJ_CARC:
case OBJ_CCUT:
{
pObj = new SdrCircObj(static_cast<SdrObjKind>(nIdentifier), rSnapRect);
bSetSnapRect = false;
if(nullptr != pSnapRect)
{
pObj = new SdrCircObj(
rSdrModel,
static_cast<SdrObjKind>(nIdentifier),
*pSnapRect);
bSetSnapRect = false;
}
else
{
pObj = new SdrCircObj(
rSdrModel,
static_cast<SdrObjKind>(nIdentifier));
}
}
break;
case sal_uInt16(OBJ_NONE ): pObj=new SdrObject; break;
case sal_uInt16(OBJ_GRUP ): pObj=new SdrObjGroup; break;
case sal_uInt16(OBJ_POLY ): pObj=new SdrPathObj(OBJ_POLY ); break;
case sal_uInt16(OBJ_PLIN ): pObj=new SdrPathObj(OBJ_PLIN ); break;
case sal_uInt16(OBJ_PATHLINE ): pObj=new SdrPathObj(OBJ_PATHLINE ); break;
case sal_uInt16(OBJ_PATHFILL ): pObj=new SdrPathObj(OBJ_PATHFILL ); break;
case sal_uInt16(OBJ_FREELINE ): pObj=new SdrPathObj(OBJ_FREELINE ); break;
case sal_uInt16(OBJ_FREEFILL ): pObj=new SdrPathObj(OBJ_FREEFILL ); break;
case sal_uInt16(OBJ_PATHPOLY ): pObj=new SdrPathObj(OBJ_POLY ); break;
case sal_uInt16(OBJ_PATHPLIN ): pObj=new SdrPathObj(OBJ_PLIN ); break;
case sal_uInt16(OBJ_EDGE ): pObj=new SdrEdgeObj; break;
case sal_uInt16(OBJ_RECT ): pObj=new SdrRectObj; break;
case sal_uInt16(OBJ_GRAF ): pObj=new SdrGrafObj; break;
case sal_uInt16(OBJ_OLE2 ): pObj=new SdrOle2Obj; break;
case sal_uInt16(OBJ_FRAME ): pObj=new SdrOle2Obj(true); break;
case sal_uInt16(OBJ_CAPTION ): pObj=new SdrCaptionObj; break;
case sal_uInt16(OBJ_PAGE ): pObj=new SdrPageObj; break;
case sal_uInt16(OBJ_UNO ): pObj=new SdrUnoObj(OUString()); break;
case sal_uInt16(OBJ_CUSTOMSHAPE ): pObj=new SdrObjCustomShape(); break;
case sal_uInt16(OBJ_NONE ): pObj=new SdrObject(rSdrModel); break;
case sal_uInt16(OBJ_GRUP ): pObj=new SdrObjGroup(rSdrModel); break;
case sal_uInt16(OBJ_POLY ): pObj=new SdrPathObj(rSdrModel, OBJ_POLY ); break;
case sal_uInt16(OBJ_PLIN ): pObj=new SdrPathObj(rSdrModel, OBJ_PLIN ); break;
case sal_uInt16(OBJ_PATHLINE ): pObj=new SdrPathObj(rSdrModel, OBJ_PATHLINE ); break;
case sal_uInt16(OBJ_PATHFILL ): pObj=new SdrPathObj(rSdrModel, OBJ_PATHFILL ); break;
case sal_uInt16(OBJ_FREELINE ): pObj=new SdrPathObj(rSdrModel, OBJ_FREELINE ); break;
case sal_uInt16(OBJ_FREEFILL ): pObj=new SdrPathObj(rSdrModel, OBJ_FREEFILL ); break;
case sal_uInt16(OBJ_PATHPOLY ): pObj=new SdrPathObj(rSdrModel, OBJ_POLY ); break;
case sal_uInt16(OBJ_PATHPLIN ): pObj=new SdrPathObj(rSdrModel, OBJ_PLIN ); break;
case sal_uInt16(OBJ_EDGE ): pObj=new SdrEdgeObj(rSdrModel); break;
case sal_uInt16(OBJ_RECT ): pObj=new SdrRectObj(rSdrModel); break;
case sal_uInt16(OBJ_GRAF ): pObj=new SdrGrafObj(rSdrModel); break;
case sal_uInt16(OBJ_OLE2 ): pObj=new SdrOle2Obj(rSdrModel); break;
case sal_uInt16(OBJ_FRAME ): pObj=new SdrOle2Obj(rSdrModel, true); break;
case sal_uInt16(OBJ_CAPTION ): pObj=new SdrCaptionObj(rSdrModel); break;
case sal_uInt16(OBJ_PAGE ): pObj=new SdrPageObj(rSdrModel); break;
case sal_uInt16(OBJ_UNO ): pObj=new SdrUnoObj(rSdrModel, OUString()); break;
case sal_uInt16(OBJ_CUSTOMSHAPE ): pObj=new SdrObjCustomShape(rSdrModel); break;
#if HAVE_FEATURE_AVMEDIA
case sal_uInt16(OBJ_MEDIA ): pObj=new SdrMediaObj(); break;
case sal_uInt16(OBJ_MEDIA ): pObj=new SdrMediaObj(rSdrModel); break;
#endif
case sal_uInt16(OBJ_TABLE ): pObj=new sdr::table::SdrTableObj(pModel); break;
case sal_uInt16(OBJ_TABLE ): pObj=new sdr::table::SdrTableObj(rSdrModel); break;
}
}
if (!pObj)
pObj = CreateObjectFromFactory(nInventor, nIdentifier);
{
pObj = CreateObjectFromFactory(rSdrModel, nInventor, nIdentifier);
}
if (!pObj)
{
@@ -3211,11 +3177,15 @@
return nullptr;
}
if (pPage)
if(nullptr != pPage)
{
pObj->SetPage(pPage);
}
if (bSetSnapRect)
pObj->SetSnapRect(rSnapRect);
if(bSetSnapRect && nullptr != pSnapRect)
{
pObj->SetSnapRect(*pSnapRect);
}
return pObj;
}
diff --git a/svx/source/svdraw/svdocapt.cxx b/svx/source/svdraw/svdocapt.cxx
index 00cb7de..cd688f3 100644
--- a/svx/source/svdraw/svdocapt.cxx
+++ b/svx/source/svdraw/svdocapt.cxx
@@ -189,16 +189,19 @@
}
SdrCaptionObj::SdrCaptionObj():
SdrRectObj(OBJ_TEXT),
SdrCaptionObj::SdrCaptionObj(SdrModel& rSdrModel)
: SdrRectObj(rSdrModel, OBJ_TEXT),
aTailPoly(3), // default size: 3 points = 2 lines
mbSpecialTextBoxShadow(false),
mbFixedTail(false)
{
}
SdrCaptionObj::SdrCaptionObj(const tools::Rectangle& rRect, const Point& rTail):
SdrRectObj(OBJ_TEXT,rRect),
SdrCaptionObj::SdrCaptionObj(
SdrModel& rSdrModel,
const tools::Rectangle& rRect,
const Point& rTail)
: SdrRectObj(rSdrModel, OBJ_TEXT,rRect),
aTailPoly(3), // default size: 3 points = 2 lines
mbSpecialTextBoxShadow(false),
mbFixedTail(false)
@@ -232,9 +235,23 @@
return sal_uInt16(OBJ_CAPTION);
}
SdrCaptionObj* SdrCaptionObj::Clone() const
SdrCaptionObj* SdrCaptionObj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< SdrCaptionObj >();
return CloneHelper< SdrCaptionObj >(pTargetModel);
}
SdrCaptionObj& SdrCaptionObj::operator=(const SdrCaptionObj& rObj)
{
if( this == &rObj )
return *this;
SdrRectObj::operator=(rObj);
aTailPoly = rObj.aTailPoly;
mbSpecialTextBoxShadow = rObj.mbSpecialTextBoxShadow;
mbFixedTail = rObj.mbFixedTail;
maFixedTailPos = rObj.maFixedTailPos;
return *this;
}
OUString SdrCaptionObj::TakeObjNameSingul() const
@@ -663,12 +680,6 @@
return Point(0,0);
}
void SdrCaptionObj::SetModel(SdrModel* pNewModel)
{
SdrRectObj::SetModel(pNewModel);
ImpRecalcTail();
}
void SdrCaptionObj::Notify(SfxBroadcaster& rBC, const SfxHint& rHint)
{
SdrRectObj::Notify(rBC,rHint);
@@ -706,8 +717,9 @@
if (pOL!=nullptr) { pRet=pRect; bInsTail = false; }
if (pOL==nullptr) pOL=pRect->GetSubList();
if (pOL!=nullptr) { pRet=pRect; bInsRect = false; }
if (pOL==nullptr) {
SdrObjGroup* pGrp=new SdrObjGroup;
if (pOL==nullptr)
{
SdrObjGroup* pGrp = new SdrObjGroup(getSdrModelFromSdrObject());
pOL=pGrp->GetSubList();
pRet=pGrp;
}
@@ -747,7 +759,8 @@
handleNegativeScale(aScale, &fRotate);
// force metric to pool metric
MapUnit eMapUnit = pModel->GetItemPool().GetMetric(0);
MapUnit eMapUnit(getSdrModelFromSdrObject().GetItemPool().GetMetric(0));
if(eMapUnit != MapUnit::Map100thMM)
{
switch(eMapUnit)
@@ -772,7 +785,7 @@
}
// if anchor is used, make position relative to it
if( pModel->IsWriter() )
if(getSdrModelFromSdrObject().IsWriter())
{
if(GetAnchorPos().X() || GetAnchorPos().Y())
{
diff --git a/svx/source/svdraw/svdocirc.cxx b/svx/source/svdraw/svdocirc.cxx
index dc87f9a..1dc049f 100644
--- a/svx/source/svdraw/svdocirc.cxx
+++ b/svx/source/svdraw/svdocirc.cxx
@@ -104,8 +104,10 @@
return new sdr::contact::ViewContactOfSdrCircObj(*this);
}
SdrCircObj::SdrCircObj(SdrObjKind eNewKind)
SdrCircObj::SdrCircObj(
SdrModel& rSdrModel,
SdrObjKind eNewKind)
: SdrRectObj(rSdrModel)
{
nStartAngle=0;
nEndAngle=36000;
@@ -113,8 +115,11 @@
bClosedObj=eNewKind!=OBJ_CARC;
}
SdrCircObj::SdrCircObj(SdrObjKind eNewKind, const tools::Rectangle& rRect):
SdrRectObj(rRect)
SdrCircObj::SdrCircObj(
SdrModel& rSdrModel,
SdrObjKind eNewKind,
const tools::Rectangle& rRect)
: SdrRectObj(rSdrModel, rRect)
{
nStartAngle=0;
nEndAngle=36000;
@@ -122,8 +127,13 @@
bClosedObj=eNewKind!=OBJ_CARC;
}
SdrCircObj::SdrCircObj(SdrObjKind eNewKind, const tools::Rectangle& rRect, long nNewStartWink, long nNewEndWink):
SdrRectObj(rRect)
SdrCircObj::SdrCircObj(
SdrModel& rSdrModel,
SdrObjKind eNewKind,
const tools::Rectangle& rRect,
long nNewStartWink,
long nNewEndWink)
: SdrRectObj(rSdrModel, rRect)
{
long nAngleDif=nNewEndWink-nNewStartWink;
nStartAngle=NormAngle360(nNewStartWink);
@@ -338,9 +348,22 @@
return ImpGetResStr(pID);
}
SdrCircObj* SdrCircObj::Clone() const
SdrCircObj* SdrCircObj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< SdrCircObj >();
return CloneHelper< SdrCircObj >(pTargetModel);
}
SdrCircObj& SdrCircObj::operator=(const SdrCircObj& rObj)
{
if( this == &rObj )
return *this;
SdrRectObj::operator=(rObj);
meCircleKind = rObj.meCircleKind;
nStartAngle = rObj.nStartAngle;
nEndAngle = rObj.nEndAngle;
return *this;
}
basegfx::B2DPolyPolygon SdrCircObj::TakeXorPoly() const
@@ -576,7 +599,7 @@
nAngle = pU->nEnd;
}
aBuf.append(GetAngleStr(nAngle));
aBuf.append(SdrModel::GetAngleString(nAngle));
aBuf.append(')');
}
@@ -594,7 +617,7 @@
ImpTakeDescriptionStr(STR_DragCircAngle, aStr);
OUStringBuffer aBuf(aStr);
aBuf.append(" (");
aBuf.append(GetAngleStr(nAngle));
aBuf.append(SdrModel::GetAngleString(nAngle));
aBuf.append(')');
return aBuf.makeStringAndClear();
diff --git a/svx/source/svdraw/svdoedge.cxx b/svx/source/svdraw/svdoedge.cxx
index 45203c3..ce5a636 100644
--- a/svx/source/svdraw/svdoedge.cxx
+++ b/svx/source/svdraw/svdoedge.cxx
@@ -161,8 +161,8 @@
}
SdrEdgeObj::SdrEdgeObj()
: SdrTextObj(),
SdrEdgeObj::SdrEdgeObj(SdrModel& rSdrModel)
: SdrTextObj(rSdrModel),
nNotifyingCount(0),
bEdgeTrackDirty(false),
bEdgeTrackUserDefined(false),
@@ -520,13 +520,14 @@
void SdrEdgeObj::ImpDirtyEdgeTrack()
{
if ( !bEdgeTrackUserDefined || !(GetModel() && GetModel()->isLocked()) )
if ( !bEdgeTrackUserDefined || !getSdrModelFromSdrObject().isLocked() )
bEdgeTrackDirty = true;
}
void SdrEdgeObj::ImpUndirtyEdgeTrack()
{
if (bEdgeTrackDirty && (GetModel() && GetModel()->isLocked()) ) {
if (bEdgeTrackDirty && getSdrModelFromSdrObject().isLocked())
{
ImpRecalcEdgeTrack();
}
}
@@ -540,7 +541,7 @@
}
// #i120437# also not when model locked during import, but remember
if(!GetModel() || GetModel()->isLocked())
if(getSdrModelFromSdrObject().isLocked())
{
mbSuppressed = true;
return;
@@ -1615,9 +1616,9 @@
}
}
SdrEdgeObj* SdrEdgeObj::Clone() const
SdrEdgeObj* SdrEdgeObj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< SdrEdgeObj >();
return CloneHelper< SdrEdgeObj >(pTargetModel);
}
SdrEdgeObj& SdrEdgeObj::operator=(const SdrEdgeObj& rObj)
@@ -2247,7 +2248,7 @@
ResizeXPoly(*pEdgeTrack,rRefPnt,aXFact,aYFact);
// if resize is not from paste, forget user distances
if (!GetModel() || !GetModel()->IsPasteResize())
if (!getSdrModelFromSdrObject().IsPasteResize())
{
aEdgeInfo.aObj1Line2 = Point();
aEdgeInfo.aObj1Line3 = Point();
diff --git a/svx/source/svdraw/svdograf.cxx b/svx/source/svdraw/svdograf.cxx
index 1a00716..e61a09d 100644
--- a/svx/source/svdraw/svdograf.cxx
+++ b/svx/source/svdraw/svdograf.cxx
@@ -216,8 +216,8 @@
::sfx2::SvBaseLink::UpdateResult SdrGraphicLink::DataChanged(
const OUString& rMimeType, const css::uno::Any & rValue )
{
SdrModel* pModel = rGrafObj.GetModel();
sfx2::LinkManager* pLinkManager= pModel ? pModel->GetLinkManager() : nullptr;
SdrModel& rModel(rGrafObj.getSdrModelFromSdrObject());
sfx2::LinkManager* pLinkManager(rModel.GetLinkManager());
if( pLinkManager && rValue.hasValue() )
{
@@ -325,15 +325,14 @@
}
}
SdrGrafObj::SdrGrafObj()
: SdrRectObj()
, mpGraphicObject(new GraphicObject)
, pGraphicLink(nullptr)
, bMirrored(false)
, mbIsSignatureLine(false)
, mbIsSignatureLineShowSignDate(true)
, mbIsSignatureLineCanAddComment(false)
SdrGrafObj::SdrGrafObj(SdrModel& rSdrModel)
: SdrRectObj(rSdrModel)
,mpGraphicObject(new GraphicObject)
,pGraphicLink(nullptr)
,bMirrored(false)
,mbIsSignatureLine(false)
,mbIsSignatureLineShowSignDate(true)
,mbIsSignatureLineCanAddComment(false)
{
mpGraphicObject->SetSwapStreamHdl( LINK(this, SdrGrafObj, ImpSwapHdl) );
onGraphicChanged();
@@ -352,14 +351,17 @@
mbSupportTextIndentingOnLineWidthChange = false;
}
SdrGrafObj::SdrGrafObj(const Graphic& rGraphic, const tools::Rectangle& rRect)
: SdrRectObj(rRect)
, mpGraphicObject(new GraphicObject(rGraphic))
, pGraphicLink(nullptr)
, bMirrored(false)
, mbIsSignatureLine(false)
, mbIsSignatureLineShowSignDate(true)
, mbIsSignatureLineCanAddComment(false)
SdrGrafObj::SdrGrafObj(
SdrModel& rSdrModel,
const Graphic& rGraphic,
const tools::Rectangle& rRect)
: SdrRectObj(rSdrModel, rRect)
,mpGraphicObject(new GraphicObject(rGraphic))
,pGraphicLink(nullptr)
,bMirrored(false)
,mbIsSignatureLine(false)
,mbIsSignatureLineShowSignDate(true)
,mbIsSignatureLineCanAddComment(false)
{
mpGraphicObject->SetSwapStreamHdl( LINK(this, SdrGrafObj, ImpSwapHdl) );
onGraphicChanged();
@@ -378,14 +380,16 @@
mbSupportTextIndentingOnLineWidthChange = false;
}
SdrGrafObj::SdrGrafObj(const Graphic& rGraphic)
: SdrRectObj()
, mpGraphicObject(new GraphicObject(rGraphic))
, pGraphicLink(nullptr)
, bMirrored(false)
, mbIsSignatureLine(false)
, mbIsSignatureLineShowSignDate(true)
, mbIsSignatureLineCanAddComment(false)
SdrGrafObj::SdrGrafObj(
SdrModel& rSdrModel,
const Graphic& rGraphic)
: SdrRectObj(rSdrModel)
,mpGraphicObject(new GraphicObject(rGraphic))
,pGraphicLink(nullptr)
,bMirrored(false)
,mbIsSignatureLine(false)
,mbIsSignatureLineShowSignDate(true)
,mbIsSignatureLineCanAddComment(false)
{
mpGraphicObject->SetSwapStreamHdl( LINK(this, SdrGrafObj, ImpSwapHdl) );
onGraphicChanged();
@@ -481,10 +485,12 @@
{
// Refactored most of the code to GraphicObject, where
// everybody can use e.g. the cropping functionality
MapMode aDestMap( pModel->GetScaleUnit(), Point(), pModel->GetScaleFraction(), pModel->GetScaleFraction() );
const Size aDestSize( GetLogicRect().GetSize() );
MapMode aDestMap(
getSdrModelFromSdrObject().GetScaleUnit(),
Point(),
getSdrModelFromSdrObject().GetScaleFraction(),
getSdrModelFromSdrObject().GetScaleFraction());
const Size aDestSize( GetLogicRect().GetSize() );
GraphicAttr aActAttr = GetGraphicAttr(nTransformFlags);
// Delegate to moved code in GraphicObject
@@ -559,11 +565,12 @@
void SdrGrafObj::SetGrafStreamURL( const OUString& rGraphicStreamURL )
{
mbIsPreview = false;
if( rGraphicStreamURL.isEmpty() )
{
mpGraphicObject->SetUserData();
}
else if( pModel->IsSwapGraphics() )
else if(getSdrModelFromSdrObject().IsSwapGraphics() )
{
mpGraphicObject->SetUserData( rGraphicStreamURL );
}
@@ -580,21 +587,20 @@
if (aGrafInfo.IsCropped())
{
long aCroppedTop = OutputDevice::LogicToLogic( aGrafInfo.GetTopCrop(), GetModel()->GetScaleUnit(), GetGrafPrefMapMode().GetMapUnit());
long aCroppedBottom = OutputDevice::LogicToLogic( aGrafInfo.GetBottomCrop(), GetModel()->GetScaleUnit(), GetGrafPrefMapMode().GetMapUnit());
long aCroppedLeft = OutputDevice::LogicToLogic( aGrafInfo.GetLeftCrop(), GetModel()->GetScaleUnit(), GetGrafPrefMapMode().GetMapUnit());
long aCroppedRight = OutputDevice::LogicToLogic( aGrafInfo.GetRightCrop(), GetModel()->GetScaleUnit(), GetGrafPrefMapMode().GetMapUnit());
long aCroppedWidth = aSize.getWidth() - aCroppedLeft + aCroppedRight;
long aCroppedHeight = aSize.getHeight() - aCroppedTop + aCroppedBottom;
const long aCroppedTop(OutputDevice::LogicToLogic(aGrafInfo.GetTopCrop(), getSdrModelFromSdrObject().GetScaleUnit(), GetGrafPrefMapMode().GetMapUnit()));
const long aCroppedBottom(OutputDevice::LogicToLogic(aGrafInfo.GetBottomCrop(), getSdrModelFromSdrObject().GetScaleUnit(), GetGrafPrefMapMode().GetMapUnit()));
const long aCroppedLeft(OutputDevice::LogicToLogic(aGrafInfo.GetLeftCrop(), getSdrModelFromSdrObject().GetScaleUnit(), GetGrafPrefMapMode().GetMapUnit()));
const long aCroppedRight(OutputDevice::LogicToLogic(aGrafInfo.GetRightCrop(), getSdrModelFromSdrObject().GetScaleUnit(), GetGrafPrefMapMode().GetMapUnit()));
const long aCroppedWidth(aSize.getWidth() - aCroppedLeft + aCroppedRight);
const long aCroppedHeight(aSize.getHeight() - aCroppedTop + aCroppedBottom);
aSize = Size ( aCroppedWidth, aCroppedHeight);
}
if ( GetGrafPrefMapMode().GetMapUnit() == MapUnit::MapPixel )
aSize = Application::GetDefaultDevice()->PixelToLogic(aSize, MapMode(GetModel()->GetScaleUnit()));
aSize = Application::GetDefaultDevice()->PixelToLogic(aSize, MapMode(getSdrModelFromSdrObject().GetScaleUnit()));
else
aSize = OutputDevice::LogicToLogic(aSize, GetGrafPrefMapMode(), MapMode(GetModel()->GetScaleUnit()));
aSize = OutputDevice::LogicToLogic(aSize, GetGrafPrefMapMode(), MapMode(getSdrModelFromSdrObject().GetScaleUnit()));
return aSize;
}
@@ -629,7 +635,7 @@
void SdrGrafObj::ImpRegisterLink()
{
sfx2::LinkManager* pLinkManager = pModel != nullptr ? pModel->GetLinkManager() : nullptr;
sfx2::LinkManager* pLinkManager(getSdrModelFromSdrObject().GetLinkManager());
if( pLinkManager != nullptr && pGraphicLink == nullptr )
{
@@ -645,7 +651,7 @@
void SdrGrafObj::ImpDeregisterLink()
{
sfx2::LinkManager* pLinkManager = pModel != nullptr ? pModel->GetLinkManager() : nullptr;
sfx2::LinkManager* pLinkManager(getSdrModelFromSdrObject().GetLinkManager());
if( pLinkManager != nullptr && pGraphicLink!=nullptr)
{
@@ -730,11 +736,11 @@
void SdrGrafObj::ImpSetLinkedGraphic( const Graphic& rGraphic )
{
const bool bIsChanged = GetModel()->IsChanged();
const bool bIsChanged(getSdrModelFromSdrObject().IsChanged());
NbcSetGraphic( rGraphic );
ActionChanged();
BroadcastObjectChange();
GetModel()->SetChanged( bIsChanged );
getSdrModelFromSdrObject().SetChanged(bIsChanged);
}
OUString SdrGrafObj::TakeObjNameSingul() const
@@ -894,9 +900,9 @@
return pRetval;
}
SdrGrafObj* SdrGrafObj::Clone() const
SdrGrafObj* SdrGrafObj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< SdrGrafObj >();
return CloneHelper< SdrGrafObj >(pTargetModel);
}
SdrGrafObj& SdrGrafObj::operator=( const SdrGrafObj& rObj )
@@ -1016,14 +1022,14 @@
ImpDeregisterLink();
}
if(!pModel && !GetStyleSheet() && pNewPage && pNewPage->GetModel())
if(!GetStyleSheet() && pNewPage)
{
// #i119287# Set default StyleSheet for SdrGrafObj here, it is different from 'Default'. This
// needs to be done before the style 'Default' is set from the :SetModel() call which is triggered
// from the following :SetPage().
// TTTT: Needs to be moved in branch aw080 due to having a SdrModel from the beginning, is at this
// place for convenience currently (works in both versions, is not in the way)
SfxStyleSheet* pSheet = pNewPage->GetModel()->GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj();
SfxStyleSheet* pSheet(pNewPage->getSdrModelFromSdrPage().GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj());
if(pSheet)
{
@@ -1042,28 +1048,6 @@
ImpRegisterLink();
}
void SdrGrafObj::SetModel( SdrModel* pNewModel )
{
bool bChg = pNewModel != pModel;
if( bChg )
{
if( mpGraphicObject->HasUserData() )
{
ForceSwapIn();
}
if( pGraphicLink != nullptr )
ImpDeregisterLink();
}
// realize model
SdrRectObj::SetModel(pNewModel);
if (bChg && !aFileName.isEmpty())
ImpRegisterLink();
}
void SdrGrafObj::StartAnimation()
{
SetGrafAnimationAllowed(true);
@@ -1083,11 +1067,15 @@
{
GDIMetaFile aRetval;
if(isEmbeddedVectorGraphicData() && GetModel())
if(isEmbeddedVectorGraphicData())
{
ScopedVclPtrInstance< VirtualDevice > pOut;
const tools::Rectangle aBoundRect(GetCurrentBoundRect());
const MapMode aMap(GetModel()->GetScaleUnit(), Point(), GetModel()->GetScaleFraction(), GetModel()->GetScaleFraction());
const MapMode aMap(
getSdrModelFromSdrObject().GetScaleUnit(),
Point(),
getSdrModelFromSdrObject().GetScaleFraction(),
getSdrModelFromSdrObject().GetScaleFraction());
pOut->EnableOutput(false);
pOut->SetMapMode(aMap);
@@ -1132,8 +1120,11 @@
case GraphicType::GdiMetafile:
{
// Sort into group and return ONLY those objects that can be created from the MetaFile.
ImpSdrGDIMetaFileImport aFilter(*GetModel(), GetLayer(), maRect);
SdrObjGroup* pGrp = new SdrObjGroup();
ImpSdrGDIMetaFileImport aFilter(
getSdrModelFromSdrObject(),
GetLayer(),
maRect);
SdrObjGroup* pGrp = new SdrObjGroup(getSdrModelFromSdrObject());
if(aFilter.DoImport(aMtf, *pGrp->GetSubList(), 0))
{
@@ -1156,7 +1147,6 @@
pRetval = pGrp;
pGrp->NbcSetLayer(GetLayer());
pGrp->SetModel(GetModel());
if(bAddText)
{
@@ -1198,10 +1188,8 @@
if(!pGrp)
{
pGrp = new SdrObjGroup();
pGrp = new SdrObjGroup(getSdrModelFromSdrObject());
pGrp->NbcSetLayer(GetLayer());
pGrp->SetModel(GetModel());
pGrp->GetSubList()->NbcInsertObject(pRetval);
}
@@ -1335,7 +1323,7 @@
// replacement image is always swapped
if (pO->IsInSwapOut())
{
SdrSwapGraphicsMode const nSwapMode(pModel->GetSwapGraphicsMode());
SdrSwapGraphicsMode const nSwapMode(getSdrModelFromSdrObject().GetSwapGraphicsMode());
if (nSwapMode & SdrSwapGraphicsMode::TEMP)
{
return GRFMGR_AUTOSWAPSTREAM_TEMP;
@@ -1359,13 +1347,13 @@
if( pO->IsInSwapOut() )
{
if( pModel && !mbIsPreview && pModel->IsSwapGraphics() && mpGraphicObject->GetSizeBytes() > 20480 )
if( !mbIsPreview && getSdrModelFromSdrObject().IsSwapGraphics() && mpGraphicObject->GetSizeBytes() > 20480 )
{
// test if this object is visualized from someone
// ## test only if there are VOCs other than the preview renderer
if(!GetViewContact().HasViewObjectContacts())
{
const SdrSwapGraphicsMode nSwapMode = pModel->GetSwapGraphicsMode();
const SdrSwapGraphicsMode nSwapMode = getSdrModelFromSdrObject().GetSwapGraphicsMode();
if( ( pGraphicLink ) &&
( nSwapMode & SdrSwapGraphicsMode::PURGE ) )
@@ -1391,78 +1379,73 @@
else if( pO->IsInSwapIn() )
{
// can be loaded from the original document stream later
if( pModel != nullptr )
if(mpGraphicObject->HasUserData())
{
if(mpGraphicObject->HasUserData())
::comphelper::LifecycleProxy proxy;
OUString aUserData = mpGraphicObject->GetUserData();
uno::Reference<io::XInputStream> const xStream(
getSdrModelFromSdrObject().GetDocumentStream(aUserData, proxy));
std::unique_ptr<SvStream> const pStream( (xStream.is())
? ::utl::UcbStreamHelper::CreateStream(xStream)
: nullptr );
if( pStream != nullptr )
{
::comphelper::LifecycleProxy proxy;
OUString aUserData = mpGraphicObject->GetUserData();
uno::Reference<io::XInputStream> const xStream(
pModel->GetDocumentStream(aUserData, proxy));
Graphic aGraphic;
std::unique_ptr<SvStream> const pStream( (xStream.is())
? ::utl::UcbStreamHelper::CreateStream(xStream)
: nullptr );
std::unique_ptr<css::uno::Sequence< css::beans::PropertyValue > > pFilterData;
if( pStream != nullptr )
if(mbInsidePaint && !GetViewContact().HasViewObjectContacts())
{
Graphic aGraphic;
pFilterData.reset(new css::uno::Sequence< css::beans::PropertyValue >( 3 ));
std::unique_ptr<css::uno::Sequence< css::beans::PropertyValue > > pFilterData;
const css::awt::Size aPreviewSizeHint( 64, 64 );
const bool bAllowPartialStreamRead = true;
// create <GfxLink> instance also for previews in order to avoid that its corresponding
// data is cleared in the graphic cache entry in case that the preview data equals the complete graphic data
const bool bCreateNativeLink = true;
(*pFilterData)[ 0 ].Name = "PreviewSizeHint";
(*pFilterData)[ 0 ].Value <<= aPreviewSizeHint;
(*pFilterData)[ 1 ].Name = "AllowPartialStreamRead";
(*pFilterData)[ 1 ].Value <<= bAllowPartialStreamRead;
(*pFilterData)[ 2 ].Name = "CreateNativeLink";
(*pFilterData)[ 2 ].Value <<= bCreateNativeLink;
if(mbInsidePaint && !GetViewContact().HasViewObjectContacts())
{
pFilterData.reset(new css::uno::Sequence< css::beans::PropertyValue >( 3 ));
const css::awt::Size aPreviewSizeHint( 64, 64 );
const bool bAllowPartialStreamRead = true;
// create <GfxLink> instance also for previews in order to avoid that its corresponding
// data is cleared in the graphic cache entry in case that the preview data equals the complete graphic data
const bool bCreateNativeLink = true;
(*pFilterData)[ 0 ].Name = "PreviewSizeHint";
(*pFilterData)[ 0 ].Value <<= aPreviewSizeHint;
(*pFilterData)[ 1 ].Name = "AllowPartialStreamRead";
(*pFilterData)[ 1 ].Value <<= bAllowPartialStreamRead;
(*pFilterData)[ 2 ].Name = "CreateNativeLink";
(*pFilterData)[ 2 ].Value <<= bCreateNativeLink;
mbIsPreview = true;
}
if(!GraphicFilter::GetGraphicFilter().ImportGraphic(
aGraphic, aUserData, *pStream,
GRFILTER_FORMAT_DONTKNOW, nullptr, GraphicFilterImportFlags::NONE, pFilterData.get()))
{
const OUString aNewUserData( mpGraphicObject->GetUserData() );
mpGraphicObject->SetGraphic( aGraphic );
if( mbIsPreview )
{
mpGraphicObject->SetUserData(aNewUserData);
}
else
{
mpGraphicObject->SetUserData();
}
// Graphic successfully swapped in.
pRet = GRFMGR_AUTOSWAPSTREAM_LOADED;
}
pFilterData.reset();
pStream->ResetError();
mbIsPreview = true;
}
}
else if( !ImpUpdateGraphicLink( false ) )
{
pRet = GRFMGR_AUTOSWAPSTREAM_TEMP;
}
else
{
pRet = GRFMGR_AUTOSWAPSTREAM_LOADED;
if(!GraphicFilter::GetGraphicFilter().ImportGraphic(
aGraphic, aUserData, *pStream,
GRFILTER_FORMAT_DONTKNOW, nullptr, GraphicFilterImportFlags::NONE, pFilterData.get()))
{
const OUString aNewUserData( mpGraphicObject->GetUserData() );
mpGraphicObject->SetGraphic( aGraphic );
if( mbIsPreview )
{
mpGraphicObject->SetUserData(aNewUserData);
}
else
{
mpGraphicObject->SetUserData();
}
// Graphic successfully swapped in.
pRet = GRFMGR_AUTOSWAPSTREAM_LOADED;
}
pFilterData.reset();
pStream->ResetError();
}
}
else
else if( !ImpUpdateGraphicLink( false ) )
{
pRet = GRFMGR_AUTOSWAPSTREAM_TEMP;
}
else
{
pRet = GRFMGR_AUTOSWAPSTREAM_LOADED;
}
}
return pRet;
@@ -1481,30 +1464,27 @@
{
Reference< XInputStream > xStream;
if( pModel )
if (mpGraphicObject && GetGraphic().IsLink())
{
if (mpGraphicObject && GetGraphic().IsLink())
Graphic aGraphic( GetGraphic() );
GfxLink aLink( aGraphic.GetLink() );
sal_uInt32 nSize = aLink.GetDataSize();
const void* pSourceData = static_cast<const void*>(aLink.GetData());
if( nSize && pSourceData )
{
Graphic aGraphic( GetGraphic() );
GfxLink aLink( aGraphic.GetLink() );
sal_uInt32 nSize = aLink.GetDataSize();
const void* pSourceData = static_cast<const void*>(aLink.GetData());
if( nSize && pSourceData )
{
sal_uInt8 * pBuffer = new sal_uInt8[ nSize ];
memcpy( pBuffer, pSourceData, nSize );
sal_uInt8 * pBuffer = new sal_uInt8[ nSize ];
memcpy( pBuffer, pSourceData, nSize );
SvMemoryStream* pStream = new SvMemoryStream( static_cast<void*>(pBuffer), static_cast<std::size_t>(nSize), StreamMode::READ );
pStream->ObjectOwnsMemory( true );
xStream.set( new utl::OInputStreamWrapper( pStream, true ) );
}
SvMemoryStream* pStream = new SvMemoryStream( static_cast<void*>(pBuffer), static_cast<std::size_t>(nSize), StreamMode::READ );
pStream->ObjectOwnsMemory( true );
xStream.set( new utl::OInputStreamWrapper( pStream, true ) );
}
}
if (!xStream.is() && !aFileName.isEmpty())
{
SvFileStream* pStream = new SvFileStream( aFileName, StreamMode::READ );
xStream.set( new utl::OInputStreamWrapper( pStream ) );
}
if (!xStream.is() && !aFileName.isEmpty())
{
SvFileStream* pStream = new SvFileStream( aFileName, StreamMode::READ );
xStream.set( new utl::OInputStreamWrapper( pStream ) );
}
return xStream;
diff --git a/svx/source/svdraw/svdogrp.cxx b/svx/source/svdraw/svdogrp.cxx
index d2151f1..6311106 100644
--- a/svx/source/svdraw/svdogrp.cxx
+++ b/svx/source/svdraw/svdogrp.cxx
@@ -50,32 +50,28 @@
#include <basegfx/polygon/b2dpolygon.hxx>
#include <libxml/xmlwriter.h>
// BaseProperties section
sdr::properties::BaseProperties* SdrObjGroup::CreateObjectSpecificProperties()
{
return new sdr::properties::GroupProperties(*this);
}
// DrawContact section
sdr::contact::ViewContact* SdrObjGroup::CreateObjectSpecificViewContact()
{
return new sdr::contact::ViewContactOfGroup(*this);
}
SdrObjGroup::SdrObjGroup()
SdrObjGroup::SdrObjGroup(SdrModel& rSdrModel)
: SdrObject(rSdrModel),
maSdrObjList(),
aRefPoint(0, 0)
{
pSub.reset( new SdrObjList(nullptr,nullptr) );
pSub->SetOwnerObj(this);
pSub->SetListKind(SdrObjListKind::GroupObj);
maSdrObjList.SetOwnerObj(this);
maSdrObjList.SetListKind(SdrObjListKind::GroupObj);
bClosedObj=false;
}
SdrObjGroup::~SdrObjGroup()
{
}
@@ -83,10 +79,9 @@
void SdrObjGroup::TakeObjInfo(SdrObjTransformInfoRec& rInfo) const
{
rInfo.bNoContortion=false;
SdrObjList* pOL=pSub.get();
const size_t nObjCount = pOL->GetObjCount();
const size_t nObjCount = maSdrObjList.GetObjCount();
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj=pOL->GetObj(i);
SdrObject* pObj=maSdrObjList.GetObj(i);
SdrObjTransformInfoRec aInfo;
pObj->TakeObjInfo(aInfo);
if (!aInfo.bMoveAllowed ) rInfo.bMoveAllowed =false;
@@ -145,10 +140,9 @@
{
bool b1st = true;
SdrLayerID nLay = SdrObject::GetLayer();
SdrObjList* pOL=pSub.get();
const size_t nObjCount = pOL->GetObjCount();
const size_t nObjCount = maSdrObjList.GetObjCount();
for (size_t i=0; i<nObjCount; ++i) {
SdrLayerID nLay1=pOL->GetObj(i)->GetLayer();
SdrLayerID nLay1=maSdrObjList.GetObj(i)->GetLayer();
if (b1st) { nLay=nLay1; b1st = false; }
else if (nLay1!=nLay) return SdrLayerID(0);
}
@@ -159,10 +153,9 @@
void SdrObjGroup::NbcSetLayer(SdrLayerID nLayer)
{
SdrObject::NbcSetLayer(nLayer);
SdrObjList* pOL=pSub.get();
const size_t nObjCount = pOL->GetObjCount();
const size_t nObjCount = maSdrObjList.GetObjCount();
for (size_t i=0; i<nObjCount; ++i) {
pOL->GetObj(i)->NbcSetLayer(nLayer);
maSdrObjList.GetObj(i)->NbcSetLayer(nLayer);
}
}
@@ -170,58 +163,27 @@
void SdrObjGroup::SetObjList(SdrObjList* pNewObjList)
{
SdrObject::SetObjList(pNewObjList);
pSub->SetUpList(pNewObjList);
maSdrObjList.SetUpList(pNewObjList);
}
void SdrObjGroup::SetPage(SdrPage* pNewPage)
{
SdrObject::SetPage(pNewPage);
pSub->SetPage(pNewPage);
maSdrObjList.SetPage(pNewPage);
}
void SdrObjGroup::SetModel(SdrModel* pNewModel)
{
if(pNewModel!=pModel)
{
// #i30648#
// This method also needs to migrate the used ItemSet
// when the destination model uses a different pool
// than the current one. Else it is possible to create
// SdrObjGroups which reference the old pool which might
// be destroyed (as the bug shows).
SdrModel* pOldModel = pModel;
// test for correct pool in ItemSet; move to new pool if necessary
if(pNewModel && &GetObjectItemPool() != &pNewModel->GetItemPool())
{
MigrateItemPool(&GetObjectItemPool(), &pNewModel->GetItemPool(), pNewModel);
}
// call parent
SdrObject::SetModel(pNewModel);
// set new model at content
pSub->SetModel(pNewModel);
// modify properties
GetProperties().SetModel(pOldModel, pNewModel);
}
}
SdrObjList* SdrObjGroup::GetSubList() const
{
return pSub.get();
return const_cast< SdrObjList* >(&maSdrObjList);
}
const tools::Rectangle& SdrObjGroup::GetCurrentBoundRect() const
{
// <aOutRect> has to contain the bounding rectangle
if ( pSub->GetObjCount()!=0 )
if ( maSdrObjList.GetObjCount()!=0 )
{
const_cast<SdrObjGroup*>(this)->aOutRect = pSub->GetAllObjBoundRect();
const_cast<SdrObjGroup*>(this)->aOutRect = maSdrObjList.GetAllObjBoundRect();
}
return aOutRect;
@@ -230,9 +192,9 @@
const tools::Rectangle& SdrObjGroup::GetSnapRect() const
{
// <aOutRect> has to contain the bounding rectangle
if ( pSub->GetObjCount()!=0 )
if ( maSdrObjList.GetObjCount()!=0 )
{
return pSub->GetAllObjSnapRect();
return maSdrObjList.GetAllObjSnapRect();
}
else
{
@@ -240,24 +202,24 @@
}
}
SdrObjGroup* SdrObjGroup::Clone() const
SdrObjGroup* SdrObjGroup::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< SdrObjGroup >();
return CloneHelper< SdrObjGroup >(pTargetModel);
}
SdrObjGroup& SdrObjGroup::operator=(const SdrObjGroup& rObj)
{
if( this == &rObj )
return *this;
// copy SdrObject stuff
SdrObject::operator=(rObj);
// #i36404#
// copy SubList, init model and page first
SdrObjList& rSourceSubList = *rObj.GetSubList();
pSub->SetPage(rSourceSubList.GetPage());
pSub->SetModel(rSourceSubList.GetModel());
pSub->CopyObjects(*rObj.GetSubList());
maSdrObjList.SetPage(rSourceSubList.GetPage());
maSdrObjList.CopyObjects(*rObj.GetSubList());
// copy local parameters
aRefPoint = rObj.aRefPoint;
@@ -269,7 +231,7 @@
{
OUStringBuffer sName;
if(!pSub->GetObjCount())
if(!maSdrObjList.GetObjCount())
{
sName.append(ImpGetResStr(STR_ObjNameSingulGRUPEMPTY));
}
@@ -294,7 +256,7 @@
OUString SdrObjGroup::TakeObjNamePlural() const
{
if (pSub->GetObjCount()==0)
if (maSdrObjList.GetObjCount()==0)
return ImpGetResStr(STR_ObjNamePluralGRUPEMPTY);
return ImpGetResStr(STR_ObjNamePluralGRUP);
}
@@ -308,11 +270,11 @@
basegfx::B2DPolyPolygon SdrObjGroup::TakeXorPoly() const
{
basegfx::B2DPolyPolygon aRetval;
const size_t nObjCount(pSub->GetObjCount());
const size_t nObjCount(maSdrObjList.GetObjCount());
for(size_t a = 0; a < nObjCount; ++a)
{
SdrObject* pObj = pSub->GetObj(a);
SdrObject* pObj = maSdrObjList.GetObj(a);
aRetval.append(pObj->TakeXorPoly());
}
@@ -341,9 +303,9 @@
{
long nRetval(0);
if(pSub->GetObjCount())
if(maSdrObjList.GetObjCount())
{
SdrObject* pObj = pSub->GetObj(0);
SdrObject* pObj = maSdrObjList.GetObj(0);
nRetval = pObj->GetRotateAngle();
}
@@ -356,9 +318,9 @@
{
long nRetval(0);
if(pSub->GetObjCount())
if(maSdrObjList.GetObjCount())
{
SdrObject* pObj = pSub->GetObj(0);
SdrObject* pObj = maSdrObjList.GetObj(0);
nRetval = pObj->GetShearAngle();
}
@@ -396,11 +358,10 @@
void SdrObjGroup::NbcMove(const Size& rSiz)
{
aRefPoint.Move(rSiz);
if (pSub->GetObjCount()!=0) {
SdrObjList* pOL=pSub.get();
const size_t nObjCount = pOL->GetObjCount();
if (maSdrObjList.GetObjCount()!=0) {
const size_t nObjCount = maSdrObjList.GetObjCount();
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj=pOL->GetObj(i);
SdrObject* pObj=maSdrObjList.GetObj(i);
pObj->NbcMove(rSiz);
}
} else {
@@ -428,11 +389,10 @@
}
}
ResizePoint(aRefPoint,rRef,xFact,yFact);
if (pSub->GetObjCount()!=0) {
SdrObjList* pOL=pSub.get();
const size_t nObjCount = pOL->GetObjCount();
if (maSdrObjList.GetObjCount()!=0) {
const size_t nObjCount = maSdrObjList.GetObjCount();
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj=pOL->GetObj(i);
SdrObject* pObj=maSdrObjList.GetObj(i);
pObj->NbcResize(rRef,xFact,yFact);
}
} else {
@@ -446,10 +406,9 @@
{
SetGlueReallyAbsolute(true);
RotatePoint(aRefPoint,rRef,sn,cs);
SdrObjList* pOL=pSub.get();
const size_t nObjCount = pOL->GetObjCount();
const size_t nObjCount = maSdrObjList.GetObjCount();
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj=pOL->GetObj(i);
SdrObject* pObj=maSdrObjList.GetObj(i);
pObj->NbcRotate(rRef,nAngle,sn,cs);
}
NbcRotateGluePoints(rRef,nAngle,sn,cs);
@@ -461,10 +420,9 @@
{
SetGlueReallyAbsolute(true);
MirrorPoint(aRefPoint,rRef1,rRef2); // implementation missing in SvdEtc!
SdrObjList* pOL=pSub.get();
const size_t nObjCount = pOL->GetObjCount();
const size_t nObjCount = maSdrObjList.GetObjCount();
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj=pOL->GetObj(i);
SdrObject* pObj=maSdrObjList.GetObj(i);
pObj->NbcMirror(rRef1,rRef2);
}
NbcMirrorGluePoints(rRef1,rRef2);
@@ -476,10 +434,9 @@
{
SetGlueReallyAbsolute(true);
ShearPoint(aRefPoint,rRef,tn);
SdrObjList* pOL=pSub.get();
const size_t nObjCount = pOL->GetObjCount();
const size_t nObjCount = maSdrObjList.GetObjCount();
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj=pOL->GetObj(i);
SdrObject* pObj=maSdrObjList.GetObj(i);
pObj->NbcShear(rRef,nAngle,tn,bVShear);
}
NbcShearGluePoints(rRef,tn,bVShear);
@@ -492,10 +449,9 @@
aAnchor=rPnt;
Size aSiz(rPnt.X()-aAnchor.X(),rPnt.Y()-aAnchor.Y());
aRefPoint.Move(aSiz);
SdrObjList* pOL=pSub.get();
const size_t nObjCount=pOL->GetObjCount();
const size_t nObjCount=maSdrObjList.GetObjCount();
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj=pOL->GetObj(i);
SdrObject* pObj=maSdrObjList.GetObj(i);
pObj->NbcSetAnchorPos(rPnt);
}
}
@@ -537,16 +493,15 @@
if (rSiz.Width()!=0 || rSiz.Height()!=0) {
tools::Rectangle aBoundRect0; if (pUserCall!=nullptr) aBoundRect0=GetLastBoundRect();
aRefPoint.Move(rSiz);
if (pSub->GetObjCount()!=0) {
if (maSdrObjList.GetObjCount()!=0) {
// first move the connectors, then everything else
SdrObjList* pOL=pSub.get();
const size_t nObjCount = pOL->GetObjCount();
const size_t nObjCount = maSdrObjList.GetObjCount();
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj=pOL->GetObj(i);
SdrObject* pObj=maSdrObjList.GetObj(i);
if (pObj->IsEdgeObj()) pObj->Move(rSiz);
}
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj=pOL->GetObj(i);
SdrObject* pObj=maSdrObjList.GetObj(i);
if (!pObj->IsEdgeObj()) pObj->Move(rSiz);
}
} else {
@@ -581,16 +536,15 @@
}
tools::Rectangle aBoundRect0; if (pUserCall!=nullptr) aBoundRect0=GetLastBoundRect();
ResizePoint(aRefPoint,rRef,xFact,yFact);
if (pSub->GetObjCount()!=0) {
if (maSdrObjList.GetObjCount()!=0) {
// move the connectors first, everything else afterwards
SdrObjList* pOL=pSub.get();
const size_t nObjCount = pOL->GetObjCount();
const size_t nObjCount = maSdrObjList.GetObjCount();
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj=pOL->GetObj(i);
SdrObject* pObj=maSdrObjList.GetObj(i);
if (pObj->IsEdgeObj()) pObj->Resize(rRef,xFact,yFact,bUnsetRelative);
}
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj=pOL->GetObj(i);
SdrObject* pObj=maSdrObjList.GetObj(i);
if (!pObj->IsEdgeObj()) pObj->Resize(rRef,xFact,yFact,bUnsetRelative);
}
} else {
@@ -614,14 +568,13 @@
tools::Rectangle aBoundRect0; if (pUserCall!=nullptr) aBoundRect0=GetLastBoundRect();
RotatePoint(aRefPoint,rRef,sn,cs);
// move the connectors first, everything else afterwards
SdrObjList* pOL=pSub.get();
const size_t nObjCount = pOL->GetObjCount();
const size_t nObjCount = maSdrObjList.GetObjCount();
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj=pOL->GetObj(i);
SdrObject* pObj=maSdrObjList.GetObj(i);
if (pObj->IsEdgeObj()) pObj->Rotate(rRef,nAngle,sn,cs);
}
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj=pOL->GetObj(i);
SdrObject* pObj=maSdrObjList.GetObj(i);
if (!pObj->IsEdgeObj()) pObj->Rotate(rRef,nAngle,sn,cs);
}
NbcRotateGluePoints(rRef,nAngle,sn,cs);
@@ -638,14 +591,13 @@
tools::Rectangle aBoundRect0; if (pUserCall!=nullptr) aBoundRect0=GetLastBoundRect();
MirrorPoint(aRefPoint,rRef1,rRef2); // implementation missing in SvdEtc!
// move the connectors first, everything else afterwards
SdrObjList* pOL=pSub.get();
const size_t nObjCount = pOL->GetObjCount();
const size_t nObjCount = maSdrObjList.GetObjCount();
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj=pOL->GetObj(i);
SdrObject* pObj=maSdrObjList.GetObj(i);
if (pObj->IsEdgeObj()) pObj->Mirror(rRef1,rRef2);
}
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj=pOL->GetObj(i);
SdrObject* pObj=maSdrObjList.GetObj(i);
if (!pObj->IsEdgeObj()) pObj->Mirror(rRef1,rRef2);
}
NbcMirrorGluePoints(rRef1,rRef2);
@@ -665,14 +617,13 @@
tools::Rectangle aBoundRect0; if (pUserCall!=nullptr) aBoundRect0=GetLastBoundRect();
ShearPoint(aRefPoint,rRef,tn);
// move the connectors first, everything else afterwards
SdrObjList* pOL=pSub.get();
const size_t nObjCount = pOL->GetObjCount();
const size_t nObjCount = maSdrObjList.GetObjCount();
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj=pOL->GetObj(i);
SdrObject* pObj=maSdrObjList.GetObj(i);
if (pObj->IsEdgeObj()) pObj->Shear(rRef,nAngle,tn,bVShear);
}
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj=pOL->GetObj(i);
SdrObject* pObj=maSdrObjList.GetObj(i);
if (!pObj->IsEdgeObj()) pObj->Shear(rRef,nAngle,tn,bVShear);
}
NbcShearGluePoints(rRef,tn,bVShear);
@@ -692,14 +643,13 @@
Size aSiz(rPnt.X()-aAnchor.X(),rPnt.Y()-aAnchor.Y());
aRefPoint.Move(aSiz);
// move the connectors first, everything else afterwards
SdrObjList* pOL=pSub.get();
const size_t nObjCount = pOL->GetObjCount();
const size_t nObjCount = maSdrObjList.GetObjCount();
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj=pOL->GetObj(i);
SdrObject* pObj=maSdrObjList.GetObj(i);
if (pObj->IsEdgeObj()) pObj->SetAnchorPos(rPnt);
}
for (size_t i=0; i<nObjCount; ++i) {
SdrObject* pObj = pOL->GetObj(i);
SdrObject* pObj = maSdrObjList.GetObj(i);
if (!pObj->IsEdgeObj()) pObj->SetAnchorPos(rPnt);
}
if (bChg) {
@@ -726,22 +676,21 @@
void SdrObjGroup::NbcReformatText()
{
pSub->NbcReformatAllTextObjects();
maSdrObjList.NbcReformatAllTextObjects();
}
void SdrObjGroup::ReformatText()
{
pSub->ReformatAllTextObjects();
maSdrObjList.ReformatAllTextObjects();
}
SdrObject* SdrObjGroup::DoConvertToPolyObj(bool bBezier, bool bAddText) const
{
SdrObject* pGroup = new SdrObjGroup;
pGroup->SetModel(GetModel());
SdrObject* pGroup = new SdrObjGroup(getSdrModelFromSdrObject());
for(size_t a=0; a<pSub->GetObjCount(); ++a)
for(size_t a=0; a<maSdrObjList.GetObjCount(); ++a)
{
SdrObject* pIterObj = pSub->GetObj(a);
SdrObject* pIterObj = maSdrObjList.GetObj(a);
SdrObject* pResult = pIterObj->DoConvertToPolyObj(bBezier, bAddText);
// pResult can be NULL e.g. for empty objects
@@ -759,7 +708,7 @@
SdrObject::dumpAsXml(pWriter);
pSub->dumpAsXml(pWriter);
maSdrObjList.dumpAsXml(pWriter);
xmlTextWriterEndElement(pWriter);
}
diff --git a/svx/source/svdraw/svdomeas.cxx b/svx/source/svdraw/svdomeas.cxx
index 63f33c6..9c1f655 100644
--- a/svx/source/svdraw/svdomeas.cxx
+++ b/svx/source/svdraw/svdomeas.cxx
@@ -94,71 +94,63 @@
{
case SdrMeasureFieldKind::Value:
{
if(pModel)
eModUIUnit = getSdrModelFromSdrObject().GetUIUnit();
if(eMeasureUnit == FUNIT_NONE)
eMeasureUnit = eModUIUnit;
sal_Int32 nLen(GetLen(aPt2 - aPt1));
Fraction aFact(1,1);
if(eMeasureUnit != eModUIUnit)
{
eModUIUnit = pModel->GetUIUnit();
// for the unit conversion
aFact *= GetMapFactor(eModUIUnit, eMeasureUnit).X();
}
if(eMeasureUnit == FUNIT_NONE)
eMeasureUnit = eModUIUnit;
if(aMeasureScale.GetNumerator() != aMeasureScale.GetDenominator())
{
aFact *= aMeasureScale;
}
sal_Int32 nLen(GetLen(aPt2 - aPt1));
Fraction aFact(1,1);
if(aFact.GetNumerator() != aFact.GetDenominator())
{
// scale via BigInt, to avoid overruns
nLen = BigMulDiv(nLen, aFact.GetNumerator(), aFact.GetDenominator());
}
if(eMeasureUnit != eModUIUnit)
{
// for the unit conversion
aFact *= GetMapFactor(eModUIUnit, eMeasureUnit).X();
}
if(aMeasureScale.GetNumerator() != aMeasureScale.GetDenominator())
{
aFact *= aMeasureScale;
}
if(aFact.GetNumerator() != aFact.GetDenominator())
{
// scale via BigInt, to avoid overruns
nLen = BigMulDiv(nLen, aFact.GetNumerator(), aFact.GetDenominator());
}
if(!aFact.IsValid())
{
aStr = "?";
}
else
{
aStr = pModel->GetMetricString(nLen, true, nNumDigits);
}
SvtSysLocale aSysLocale;
const LocaleDataWrapper& rLocaleDataWrapper = aSysLocale.GetLocaleData();
sal_Unicode cDec(rLocaleDataWrapper.getNumDecimalSep()[0]);
sal_Unicode cDecAlt(rLocaleDataWrapper.getNumDecimalSepAlt().toChar());
if(aStr.indexOf(cDec) != -1 || (cDecAlt && aStr.indexOf(cDecAlt) != -1))
{
sal_Int32 nLen2(aStr.getLength() - 1);
while(aStr[nLen2] == '0')
{
aStr = aStr.copy(0, nLen2);
nLen2--;
}
if(aStr[nLen2] == cDec || (cDecAlt && aStr[nLen2] == cDecAlt))
{
aStr = aStr.copy(0, nLen2);
nLen2--;
}
if(aStr.isEmpty())
aStr += "0";
}
if(!aFact.IsValid())
{
aStr = "?";
}
else
{
// if there's no Model ... (e. g. preview in dialog)
aStr = "4711";
aStr = getSdrModelFromSdrObject().GetMetricString(nLen, true, nNumDigits);
}
SvtSysLocale aSysLocale;
const LocaleDataWrapper& rLocaleDataWrapper = aSysLocale.GetLocaleData();
sal_Unicode cDec(rLocaleDataWrapper.getNumDecimalSep()[0]);
sal_Unicode cDecAlt(rLocaleDataWrapper.getNumDecimalSepAlt().toChar());
if(aStr.indexOf(cDec) != -1 || (cDecAlt && aStr.indexOf(cDecAlt) != -1))
{
sal_Int32 nLen2(aStr.getLength() - 1);
while(aStr[nLen2] == '0')
{
aStr = aStr.copy(0, nLen2);
nLen2--;
}
if(aStr[nLen2] == cDec || (cDecAlt && aStr[nLen2] == cDecAlt))
{
aStr = aStr.copy(0, nLen2);
nLen2--;
}
if(aStr.isEmpty())
aStr += "0";
}
break;
@@ -167,16 +159,13 @@
{
if(bShowUnit)
{
if(pModel)
{
eModUIUnit = pModel->GetUIUnit();
eModUIUnit = getSdrModelFromSdrObject().GetUIUnit();
if(eMeasureUnit == FUNIT_NONE)
eMeasureUnit = eModUIUnit;
if(eMeasureUnit == FUNIT_NONE)
eMeasureUnit = eModUIUnit;
if(bShowUnit)
aStr = SdrModel::GetUnitString(eMeasureUnit);
}
if(bShowUnit)
aStr = SdrModel::GetUnitString(eMeasureUnit);
}
break;
@@ -211,14 +200,19 @@
}
SdrMeasureObj::SdrMeasureObj():
SdrMeasureObj::SdrMeasureObj(SdrModel& rSdrModel)
: SdrTextObj(rSdrModel),
bTextDirty(false)
{
// #i25616#
mbSupportTextIndentingOnLineWidthChange = false;
}
SdrMeasureObj::SdrMeasureObj(const Point& rPt1, const Point& rPt2):
SdrMeasureObj::SdrMeasureObj(
SdrModel& rSdrModel,
const Point& rPt1,
const Point& rPt2)
: SdrTextObj(rSdrModel),
aPt1(rPt1),
aPt2(rPt2),
bTextDirty(false)
@@ -708,9 +702,22 @@
}
}
SdrMeasureObj* SdrMeasureObj::Clone() const
SdrMeasureObj* SdrMeasureObj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< SdrMeasureObj >();
return CloneHelper< SdrMeasureObj >(pTargetModel);
}
SdrMeasureObj& SdrMeasureObj::operator=(const SdrMeasureObj& rObj)
{
if( this == &rObj )
return *this;
SdrTextObj::operator=(rObj);
aPt1 = rObj.aPt1;
aPt2 = rObj.aPt2;
bTextDirty = rObj.bTextDirty;
return *this;
}
OUString SdrMeasureObj::TakeObjNameSingul() const
@@ -1138,8 +1145,7 @@
SfxStyleSheet* pStyleSheet = GetStyleSheet();
// prepare group
SdrObjGroup* pGroup = new SdrObjGroup;
pGroup->SetModel(GetModel());
SdrObjGroup* pGroup = new SdrObjGroup(getSdrModelFromSdrObject());
// prepare parameters
basegfx::B2DPolyPolygon aPolyPoly;
@@ -1153,8 +1159,11 @@
aPolyPoly.clear();
aPolyPoly.append(aTmpPolyPolygon[0].getB2DPolygon());
pPath = new SdrPathObj(OBJ_PATHLINE, aPolyPoly);
pPath->SetModel(GetModel());
pPath = new SdrPathObj(
getSdrModelFromSdrObject(),
OBJ_PATHLINE,
aPolyPoly);
pPath->SetMergedItemSet(aSet);
pPath->SetStyleSheet(pStyleSheet, true);
pGroup->GetSubList()->NbcInsertObject(pPath);
@@ -1171,8 +1180,11 @@
aPolyPoly.clear();
aPolyPoly.append(aTmpPolyPolygon[0].getB2DPolygon());
pPath = new SdrPathObj(OBJ_PATHLINE, aPolyPoly);
pPath->SetModel(GetModel());
pPath = new SdrPathObj(
getSdrModelFromSdrObject(),
OBJ_PATHLINE,
aPolyPoly);
pPath->SetMergedItemSet(aSet);
pPath->SetStyleSheet(pStyleSheet, true);
@@ -1183,8 +1195,11 @@
aPolyPoly.clear();
aPolyPoly.append(aTmpPolyPolygon[1].getB2DPolygon());
pPath = new SdrPathObj(OBJ_PATHLINE, aPolyPoly);
pPath->SetModel(GetModel());
pPath = new SdrPathObj(
getSdrModelFromSdrObject(),
OBJ_PATHLINE,
aPolyPoly);
pPath->SetMergedItemSet(aSet);
pPath->SetStyleSheet(pStyleSheet, true);
@@ -1202,8 +1217,11 @@
aPolyPoly.clear();
aPolyPoly.append(aTmpPolyPolygon[0].getB2DPolygon());
pPath = new SdrPathObj(OBJ_PATHLINE, aPolyPoly);
pPath->SetModel(GetModel());
pPath = new SdrPathObj(
getSdrModelFromSdrObject(),
OBJ_PATHLINE,
aPolyPoly);
pPath->SetMergedItemSet(aSet);
pPath->SetStyleSheet(pStyleSheet, true);
@@ -1214,8 +1232,11 @@
aPolyPoly.clear();
aPolyPoly.append(aTmpPolyPolygon[1].getB2DPolygon());
pPath = new SdrPathObj(OBJ_PATHLINE, aPolyPoly);
pPath->SetModel(GetModel());
pPath = new SdrPathObj(
getSdrModelFromSdrObject(),
OBJ_PATHLINE,
aPolyPoly);
pPath->SetMergedItemSet(aSet);
pPath->SetStyleSheet(pStyleSheet, true);
@@ -1229,8 +1250,11 @@
{
aPolyPoly.clear();
aPolyPoly.append(aTmpPolyPolygon[nLoopStart].getB2DPolygon());
pPath = new SdrPathObj(OBJ_PATHLINE, aPolyPoly);
pPath->SetModel(GetModel());
pPath = new SdrPathObj(
getSdrModelFromSdrObject(),
OBJ_PATHLINE,
aPolyPoly);
pPath->SetMergedItemSet(aSet);
pPath->SetStyleSheet(pStyleSheet, true);
@@ -1361,7 +1385,7 @@
basegfx::B2DTuple aTranslate(aRange.getMinimum());
// position maybe relative to anchor position, convert
if( pModel->IsWriter() )
if( getSdrModelFromSdrObject().IsWriter() )
{
if(GetAnchorPos().X() || GetAnchorPos().Y())
{
@@ -1370,7 +1394,7 @@
}
// force MapUnit to 100th mm
MapUnit eMapUnit = pModel->GetItemPool().GetMetric(0);
MapUnit eMapUnit = getSdrModelFromSdrObject().GetItemPool().GetMetric(0);
if(eMapUnit != MapUnit::Map100thMM)
{
switch(eMapUnit)
@@ -1407,7 +1431,7 @@
basegfx::B2DPoint aPosB(rMatrix * basegfx::B2DPoint(1.0, 0.0));
// force metric to pool metric
MapUnit eMapUnit = pModel->GetItemPool().GetMetric(0);
MapUnit eMapUnit = getSdrModelFromSdrObject().GetItemPool().GetMetric(0);
if(eMapUnit != MapUnit::Map100thMM)
{
switch(eMapUnit)
@@ -1429,7 +1453,7 @@
}
}
if( pModel->IsWriter() )
if( getSdrModelFromSdrObject().IsWriter() )
{
// if anchor is used, make position relative to it
if(GetAnchorPos().X() || GetAnchorPos().Y())
diff --git a/svx/source/svdraw/svdomedia.cxx b/svx/source/svdraw/svdomedia.cxx
index 4c41e76..012dc1d 100644
--- a/svx/source/svdraw/svdomedia.cxx
+++ b/svx/source/svdraw/svdomedia.cxx
@@ -65,16 +65,17 @@
OUString m_LastFailedPkgURL;
};
SdrMediaObj::SdrMediaObj()
: SdrRectObj()
, m_xImpl( new Impl )
SdrMediaObj::SdrMediaObj(SdrModel& rSdrModel)
: SdrRectObj(rSdrModel)
,m_xImpl( new Impl )
{
}
SdrMediaObj::SdrMediaObj( const tools::Rectangle& rRect )
: SdrRectObj( rRect )
, m_xImpl( new Impl )
SdrMediaObj::SdrMediaObj(
SdrModel& rSdrModel,
const tools::Rectangle& rRect)
: SdrRectObj(rSdrModel, rRect)
,m_xImpl( new Impl )
{
}
@@ -141,9 +142,9 @@
return ImpGetResStr(STR_ObjNamePluralMEDIA);
}
SdrMediaObj* SdrMediaObj::Clone() const
SdrMediaObj* SdrMediaObj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< SdrMediaObj >();
return CloneHelper< SdrMediaObj >(pTargetModel);
}
SdrMediaObj& SdrMediaObj::operator=(const SdrMediaObj& rObj)
@@ -315,8 +316,14 @@
SAL_WARN("svx", "this is only intended for embedded media");
return;
}
OUString tempFileURL;
bool const bSuccess = lcl_CopyToTempFile(xStream, tempFileURL, "");
const bool bSuccess(
lcl_CopyToTempFile(
xStream,
tempFileURL,
""));
if (bSuccess)
{
m_xImpl->m_pTempFile.reset(new MediaTempFile(tempFileURL));
@@ -331,19 +338,14 @@
/// copy a stream from XStorage to temp file
#if HAVE_FEATURE_AVMEDIA
static bool lcl_HandlePackageURL(
OUString const & rURL,
SdrModel const *const pModel,
OUString & o_rTempFileURL)
OUString const & rURL,
const SdrModel& rModel,
OUString & o_rTempFileURL)
{
if (!pModel)
{
SAL_WARN("svx", "no model");
return false;
}
::comphelper::LifecycleProxy sourceProxy;
uno::Reference<io::XInputStream> xInStream;
try {
xInStream = pModel->GetDocumentStream(rURL, sourceProxy);
xInStream = rModel.GetDocumentStream(rURL, sourceProxy);
}
catch (container::NoSuchElementException const&)
{
@@ -394,8 +396,12 @@
rNewProperties.getTempURL()))
{
OUString tempFileURL;
bool bSuccess;
bSuccess = lcl_HandlePackageURL(url, GetModel(), tempFileURL);
const bool bSuccess(
lcl_HandlePackageURL(
url,
getSdrModelFromSdrObject(),
tempFileURL));
if (bSuccess)
{
m_xImpl->m_pTempFile.reset(
diff --git a/svx/source/svdraw/svdoole2.cxx b/svx/source/svdraw/svdoole2.cxx
index 8a26427..50595c5 100644
--- a/svx/source/svdraw/svdoole2.cxx
+++ b/svx/source/svdraw/svdoole2.cxx
@@ -663,13 +663,42 @@
return new sdr::contact::ViewContactOfSdrOle2Obj(*this);
}
SdrOle2Obj::SdrOle2Obj( bool bFrame_ ) :
mpImpl(new SdrOle2ObjImpl(bFrame_))
void SdrOle2Obj::Init()
{
// Stuff that was done from old SetModel:
// #i43086# #i85304 redo the change for charts for the above bugfix, as #i43086# does not occur anymore
// so maybe the ImpSetVisAreaSize call can be removed here completely
// Nevertheless I leave it in for other objects as I am not sure about the side effects when removing now
if(!getSdrModelFromSdrObject().isLocked() && !IsChart())
{
ImpSetVisAreaSize();
}
::comphelper::IEmbeddedHelper* pDestPers(getSdrModelFromSdrObject().GetPersist());
if(pDestPers && !IsEmptyPresObj())
{
// object wasn't connected, now it should be
Connect_Impl();
}
AddListeners_Impl();
}
SdrOle2Obj::SdrOle2Obj( const svt::EmbeddedObjectRef& rNewObjRef, const OUString& rNewObjName, const tools::Rectangle& rNewRect) :
SdrRectObj(rNewRect),
SdrOle2Obj::SdrOle2Obj(
SdrModel& rSdrModel,
bool bFrame_)
: SdrRectObj(rSdrModel),
mpImpl(new SdrOle2ObjImpl(bFrame_))
{
Init();
}
SdrOle2Obj::SdrOle2Obj(
SdrModel& rSdrModel,
const svt::EmbeddedObjectRef& rNewObjRef,
const OUString& rNewObjName,
const tools::Rectangle& rNewRect)
: SdrRectObj(rSdrModel, rNewRect),
mpImpl(new SdrOle2ObjImpl(false/*bFrame_*/, rNewObjRef))
{
mpImpl->aPersistName = rNewObjName;
@@ -679,6 +708,8 @@
// For math objects, set closed state to transparent
SetClosedObj(!ImplIsMathObj( mpImpl->mxObjRef.GetObject() ));
Init();
}
OUString SdrOle2Obj::GetStyleString()
@@ -781,7 +812,8 @@
if ( mpImpl->mpObjectLink )
{
sfx2::LinkManager* pLinkManager = pModel ? pModel->GetLinkManager() : nullptr;
sfx2::LinkManager* pLinkManager(getSdrModelFromSdrObject().GetLinkManager());
if ( pLinkManager )
{
OUString aNewLinkURL;
@@ -831,9 +863,7 @@
void SdrOle2Obj::BreakFileLink_Impl()
{
uno::Reference<document::XStorageBasedDocument> xDoc;
if ( pModel )
xDoc.set( pModel->getUnoModel(),uno::UNO_QUERY);
uno::Reference<document::XStorageBasedDocument> xDoc(getSdrModelFromSdrObject().getUnoModel(), uno::UNO_QUERY);
if ( xDoc.is() )
{
@@ -858,7 +888,8 @@
void SdrOle2Obj::DisconnectFileLink_Impl()
{
sfx2::LinkManager* pLinkManager = pModel ? pModel->GetLinkManager() : nullptr;
sfx2::LinkManager* pLinkManager(getSdrModelFromSdrObject().GetLinkManager());
if ( pLinkManager && mpImpl->mpObjectLink )
{
pLinkManager->Remove( mpImpl->mpObjectLink );
@@ -868,18 +899,21 @@
void SdrOle2Obj::CheckFileLink_Impl()
{
if (pModel && mpImpl->mxObjRef.GetObject().is() && !mpImpl->mpObjectLink)
if (mpImpl->mxObjRef.GetObject().is() && !mpImpl->mpObjectLink)
{
try
{
uno::Reference< embed::XLinkageSupport > xLinkSupport( mpImpl->mxObjRef.GetObject(), uno::UNO_QUERY );
if ( xLinkSupport.is() && xLinkSupport->isLink() )
{
OUString aLinkURL = xLinkSupport->getLinkURL();
if ( !aLinkURL.isEmpty() )
{
// this is a file link so the model link manager should handle it
sfx2::LinkManager* pLinkManager = pModel->GetLinkManager();
sfx2::LinkManager* pLinkManager(getSdrModelFromSdrObject().GetLinkManager());
if ( pLinkManager )
{
mpImpl->mpObjectLink = new SdrEmbedObjectLink( this );
@@ -905,14 +939,16 @@
void SdrOle2Obj::Connect_Impl()
{
if( pModel && !mpImpl->aPersistName.isEmpty() )
if(!mpImpl->aPersistName.isEmpty() )
{
try
{
::comphelper::IEmbeddedHelper* pPers = pModel->GetPersist();
::comphelper::IEmbeddedHelper* pPers(getSdrModelFromSdrObject().GetPersist());
if ( pPers )
{
comphelper::EmbeddedObjectContainer& rContainer = pPers->getEmbeddedObjectContainer();
if ( !rContainer.HasEmbeddedObject( mpImpl->aPersistName )
|| ( mpImpl->mxObjRef.is() && !rContainer.HasEmbeddedObject( mpImpl->mxObjRef.GetObject() ) ) )
{
@@ -957,9 +993,9 @@
uno::Reference< container::XChild > xChild( mpImpl->mxObjRef.GetObject(), uno::UNO_QUERY );
if( xChild.is() )
{
uno::Reference< uno::XInterface > xParent( pModel->getUnoModel());
uno::Reference< uno::XInterface > xParent( getSdrModelFromSdrObject().getUnoModel());
if( xParent.is())
xChild->setParent( pModel->getUnoModel() );
xChild->setParent( getSdrModelFromSdrObject().getUnoModel() );
}
}
@@ -1040,9 +1076,9 @@
{
try
{
if ( pModel && !mpImpl->aPersistName.isEmpty() )
if ( !mpImpl->aPersistName.isEmpty() )
{
if( pModel->IsInDestruction() )
if( getSdrModelFromSdrObject().IsInDestruction() )
{
// TODO/LATER: here we must assume that the destruction of the model is enough to make clear that we will not
// remove the object from the container, even if the DrawingObject itself is not destroyed (unfortunately this
@@ -1078,7 +1114,7 @@
}
else if ( mpImpl->mxObjRef.is() )
{
if ( pModel->getUnoModel().is() )
if ( getSdrModelFromSdrObject().getUnoModel().is() )
{
// remove object, but don't close it (that's up to someone else)
comphelper::EmbeddedObjectContainer* pContainer = mpImpl->mxObjRef.GetContainer();
@@ -1122,8 +1158,9 @@
if(pOLEGraphic)
{
// #i118485# allow creating a SdrGrafObj representation
SdrGrafObj* pClone = new SdrGrafObj(*pOLEGraphic);
pClone->SetModel(GetModel());
SdrGrafObj* pClone = new SdrGrafObj(
getSdrModelFromSdrObject(),
*pOLEGraphic);
// copy transformation
basegfx::B2DHomMatrix aMatrix;
@@ -1141,7 +1178,7 @@
// #i118485# copy text (Caution! Model needed, as guaranteed in aw080)
OutlinerParaObject* pOPO = GetOutlinerParaObject();
if(pOPO && GetModel())
if(pOPO)
{
pClone->NbcSetOutlinerParaObject(new OutlinerParaObject(*pOPO));
}
@@ -1153,8 +1190,9 @@
{
// #i100710# pOLEGraphic may be zero (no visualisation available),
// so we need to use the OLE replacement graphic
SdrRectObj* pClone = new SdrRectObj(GetSnapRect());
pClone->SetModel(GetModel());
SdrRectObj* pClone = new SdrRectObj(
getSdrModelFromSdrObject(),
GetSnapRect());
// gray outline
pClone->SetMergedItem(XLineStyleItem(css::drawing::LineStyle_SOLID));
@@ -1175,92 +1213,19 @@
SdrObject* SdrOle2Obj::DoConvertToPolyObj(bool bBezier, bool bAddText) const
{
// #i118485# missing converter added
if(GetModel())
SdrObject* pRetval = createSdrGrafObjReplacement(true);
if(pRetval)
{
SdrObject* pRetval = createSdrGrafObjReplacement(true);
SdrObject* pRetval2 = pRetval->DoConvertToPolyObj(bBezier, bAddText);
SdrObject::Free(pRetval);
if(pRetval)
{
SdrObject* pRetval2 = pRetval->DoConvertToPolyObj(bBezier, bAddText);
SdrObject::Free(pRetval);
return pRetval2;
}
return pRetval2;
}
return nullptr;
}
void SdrOle2Obj::SetModel(SdrModel* pNewModel)
{
::comphelper::IEmbeddedHelper* pDestPers = pNewModel ? pNewModel->GetPersist() : nullptr;
::comphelper::IEmbeddedHelper* pSrcPers = pModel ? pModel->GetPersist() : nullptr;
if ( pNewModel == pModel )
{
// don't know if this is necessary or if it will ever happen, but who knows?!
SdrRectObj::SetModel( pNewModel );
return;
}
// assignment to model has changed
DBG_ASSERT( pSrcPers || !mpImpl->mbConnected, "Connected object without a model?!" );
DBG_ASSERT( pDestPers, "The destination model must have a persistence! Please submit an issue!" );
DBG_ASSERT( pDestPers != pSrcPers, "The source and the destination models should have different persistences! Problems are possible!" );
// this is a bug if the target model has no persistence
// no error handling is possible so just do nothing in this method
if ( !pDestPers )
return;
RemoveListeners_Impl();
if( pDestPers && pSrcPers && !IsEmptyPresObj() )
{
try
{
// move the object's storage; ObjectRef remains the same, but PersistName may change
OUString aTmp;
comphelper::EmbeddedObjectContainer& rContainer = pSrcPers->getEmbeddedObjectContainer();
uno::Reference < embed::XEmbeddedObject > xObj = rContainer.GetEmbeddedObject( mpImpl->aPersistName );
DBG_ASSERT( !mpImpl->mxObjRef.is() || mpImpl->mxObjRef.GetObject() == xObj, "Wrong object identity!" );
if ( xObj.is() )
{
pDestPers->getEmbeddedObjectContainer().MoveEmbeddedObject( rContainer, xObj, aTmp );
mpImpl->aPersistName = aTmp;
mpImpl->mxObjRef.AssignToContainer( &pDestPers->getEmbeddedObjectContainer(), aTmp );
}
DBG_ASSERT( !aTmp.isEmpty(), "Copying embedded object failed!" );
}
catch( css::uno::Exception& )
{
SAL_WARN( "svx", "SdrOle2Obj::SetModel(), exception caught: "
<< comphelper::anyToString( cppu::getCaughtException() ) );
}
}
SdrRectObj::SetModel( pNewModel );
// #i43086#
// #i85304 redo the change for charts for the above bugfix, as #i43086# does not occur anymore
//so maybe the ImpSetVisAreaSize call can be removed here completely
//Nevertheless I leave it in for other objects as I am not sure about the side effects when removing now
if( pModel && !pModel->isLocked() && !IsChart() )
ImpSetVisAreaSize();
if( pDestPers && !IsEmptyPresObj() )
{
if ( !pSrcPers || IsEmptyPresObj() )
// object wasn't connected, now it should be
Connect_Impl();
else
Reconnect_Impl();
}
AddListeners_Impl();
}
void SdrOle2Obj::SetPage(SdrPage* pNewPage)
{
bool bRemove=pNewPage==nullptr && pPage!=nullptr;
@@ -1269,14 +1234,14 @@
if (bRemove && mpImpl->mbConnected )
Disconnect();
if(!pModel && !GetStyleSheet() && pNewPage && pNewPage->GetModel())
if(!GetStyleSheet() && pNewPage)
{
// #i119287# Set default StyleSheet for SdrGrafObj here, it is different from 'Default'. This
// needs to be done before the style 'Default' is set from the :SetModel() call which is triggered
// from the following :SetPage().
// TTTT: Needs to be moved in branch aw080 due to having a SdrModel from the beginning, is at this
// place for convenience currently (works in both versions, is not in the way)
SfxStyleSheet* pSheet = pNewPage->GetModel()->GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj();
SfxStyleSheet* pSheet = pNewPage->getSdrModelFromSdrPage().GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj();
if(pSheet)
{
@@ -1414,60 +1379,9 @@
return ImpGetResStr(mpImpl->mbFrame ? STR_ObjNamePluralFrame : STR_ObjNamePluralOLE2);
}
SdrOle2Obj* SdrOle2Obj::Clone() const
SdrOle2Obj* SdrOle2Obj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< SdrOle2Obj >();
}
SdrOle2Obj& SdrOle2Obj::assignFrom(const SdrOle2Obj& rObj)
{
//TODO/LATER: who takes over control of my old object?!
if( &rObj != this )
{
// ImpAssign( rObj );
const SdrOle2Obj& rOle2Obj = rObj;
if( pModel && mpImpl->mbConnected )
Disconnect();
SdrRectObj::operator=( rObj );
// Manually copying bClosedObj attribute
SetClosedObj( rObj.IsClosedObj() );
mpImpl->aPersistName = rOle2Obj.mpImpl->aPersistName;
mpImpl->maProgName = rOle2Obj.mpImpl->maProgName;
mpImpl->mbFrame = rOle2Obj.mpImpl->mbFrame;
if (rOle2Obj.mpImpl->mxGraphic)
{
mpImpl->mxGraphic.reset(new Graphic(*rOle2Obj.mpImpl->mxGraphic));
}
if( pModel && rObj.GetModel() && !IsEmptyPresObj() )
{
::comphelper::IEmbeddedHelper* pDestPers = pModel->GetPersist();
::comphelper::IEmbeddedHelper* pSrcPers = rObj.GetModel()->GetPersist();
if( pDestPers && pSrcPers )
{
DBG_ASSERT( !mpImpl->mxObjRef.is(), "Object already existing!" );
comphelper::EmbeddedObjectContainer& rContainer = pSrcPers->getEmbeddedObjectContainer();
uno::Reference < embed::XEmbeddedObject > xObj = rContainer.GetEmbeddedObject( mpImpl->aPersistName );
if ( xObj.is() )
{
OUString aTmp;
mpImpl->mxObjRef.Assign( pDestPers->getEmbeddedObjectContainer().CopyAndGetEmbeddedObject(
rContainer, xObj, aTmp, pSrcPers->getDocumentBaseURL(), pDestPers->getDocumentBaseURL()), rOle2Obj.GetAspect());
mpImpl->mbTypeAsked = false;
mpImpl->aPersistName = aTmp;
CheckFileLink_Impl();
}
Connect();
}
}
}
return *this;
return CloneHelper< SdrOle2Obj >(pTargetModel);
}
SdrOle2Obj& SdrOle2Obj::operator=(const SdrOle2Obj& rObj)
@@ -1475,6 +1389,60 @@
return assignFrom(rObj);
}
SdrOle2Obj& SdrOle2Obj::assignFrom(const SdrOle2Obj& rObj)
{
//TODO/LATER: who takes over control of my old object?!
if( &rObj == this )
{
return *this;
}
// ImpAssign( rObj );
const SdrOle2Obj& rOle2Obj = rObj;
if( mpImpl->mbConnected )
Disconnect();
SdrRectObj::operator=( rObj );
// Manually copying bClosedObj attribute
SetClosedObj( rObj.IsClosedObj() );
mpImpl->aPersistName = rOle2Obj.mpImpl->aPersistName;
mpImpl->maProgName = rOle2Obj.mpImpl->maProgName;
mpImpl->mbFrame = rOle2Obj.mpImpl->mbFrame;
if (rOle2Obj.mpImpl->mxGraphic)
{
mpImpl->mxGraphic.reset(new Graphic(*rOle2Obj.mpImpl->mxGraphic));
}
if( !IsEmptyPresObj() )
{
::comphelper::IEmbeddedHelper* pDestPers(getSdrModelFromSdrObject().GetPersist());
::comphelper::IEmbeddedHelper* pSrcPers(rObj.getSdrModelFromSdrObject().GetPersist());
if( pDestPers && pSrcPers )
{
DBG_ASSERT( !mpImpl->mxObjRef.is(), "Object already existing!" );
comphelper::EmbeddedObjectContainer& rContainer = pSrcPers->getEmbeddedObjectContainer();
uno::Reference < embed::XEmbeddedObject > xObj = rContainer.GetEmbeddedObject( mpImpl->aPersistName );
if ( xObj.is() )
{
OUString aTmp;
mpImpl->mxObjRef.Assign( pDestPers->getEmbeddedObjectContainer().CopyAndGetEmbeddedObject(
rContainer, xObj, aTmp, pSrcPers->getDocumentBaseURL(), pDestPers->getDocumentBaseURL()), rOle2Obj.GetAspect());
mpImpl->mbTypeAsked = false;
mpImpl->aPersistName = aTmp;
CheckFileLink_Impl();
}
Connect();
}
}
return *this;
}
void SdrOle2Obj::ImpSetVisAreaSize()
{
// #i118524# do not again set VisAreaSize when the call comes from OLE client (e.g. ObjectAreaChanged)
@@ -1490,14 +1458,17 @@
GetObjRef();
if (mpImpl->mxObjRef.is())
{
OSL_ASSERT( pModel );
sal_Int64 nMiscStatus = mpImpl->mxObjRef->getStatus( GetAspect() );
// the client is required to get access to scaling
SfxInPlaceClient* pClient = SfxInPlaceClient::GetClient( dynamic_cast<SfxObjectShell*>(pModel->GetPersist()), mpImpl->mxObjRef.GetObject() );
bool bHasOwnClient =
( mpImpl->mxLightClient.is()
&& mpImpl->mxObjRef->getClientSite() == uno::Reference< embed::XEmbeddedClient >( mpImpl->mxLightClient.get() ) );
SfxInPlaceClient* pClient(
SfxInPlaceClient::GetClient(
dynamic_cast<SfxObjectShell*>(
getSdrModelFromSdrObject().GetPersist()),
mpImpl->mxObjRef.GetObject()));
const bool bHasOwnClient(
mpImpl->mxLightClient.is() &&
mpImpl->mxObjRef->getClientSite() == uno::Reference< embed::XEmbeddedClient >( mpImpl->mxLightClient.get() ) );
if ( pClient || bHasOwnClient )
{
@@ -1529,7 +1500,10 @@
Size aVisSize( static_cast<long>( Fraction( maRect.GetWidth() ) / aScaleWidth ),
static_cast<long>( Fraction( maRect.GetHeight() ) / aScaleHeight ) );
aVisSize = OutputDevice::LogicToLogic(aVisSize, MapMode(pModel->GetScaleUnit()), MapMode(aMapUnit));
aVisSize = OutputDevice::LogicToLogic(
aVisSize,
MapMode(getSdrModelFromSdrObject().GetScaleUnit()),
MapMode(aMapUnit));
awt::Size aSz;
aSz.Width = aVisSize.Width();
aSz.Height = aVisSize.Height();
@@ -1550,7 +1524,11 @@
// server changed VisArea to its liking and the VisArea is different than the suggested one
// store the new value as given by the object
MapUnit aNewMapUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( mpImpl->mxObjRef->getMapUnit( GetAspect() ) );
maRect.SetSize(OutputDevice::LogicToLogic(aAcceptedVisArea.GetSize(), MapMode(aNewMapUnit), MapMode(pModel->GetScaleUnit())));
maRect.SetSize(
OutputDevice::LogicToLogic(
aAcceptedVisArea.GetSize(),
MapMode(aNewMapUnit),
MapMode(getSdrModelFromSdrObject().GetScaleUnit())));
}
// make the new object area known to the client
@@ -1596,13 +1574,30 @@
uno::Reference< embed::XVisualObject > xVisualObject( getXModel(), uno::UNO_QUERY );
if( xVisualObject.is() )
{
MapUnit aMapUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( mpImpl->mxObjRef->getMapUnit( GetAspect() ) );
Point aTL( maRect.TopLeft() );
Point aBR( maRect.BottomRight() );
Point aTL2(OutputDevice::LogicToLogic(aTL, MapMode(pModel->GetScaleUnit()), MapMode(aMapUnit)));
Point aBR2(OutputDevice::LogicToLogic(aBR, MapMode(pModel->GetScaleUnit()), MapMode(aMapUnit)));
tools::Rectangle aNewRect( aTL2, aBR2 );
xVisualObject->setVisualAreaSize( GetAspect(), awt::Size( aNewRect.GetWidth(), aNewRect.GetHeight() ) );
const MapUnit aMapUnit(
VCLUnoHelper::UnoEmbed2VCLMapUnit(
mpImpl->mxObjRef->getMapUnit(GetAspect())));
const Point aTL( maRect.TopLeft() );
const Point aBR( maRect.BottomRight() );
const Point aTL2(
OutputDevice::LogicToLogic(
aTL,
MapMode(getSdrModelFromSdrObject().GetScaleUnit()),
MapMode(aMapUnit)));
const Point aBR2(
OutputDevice::LogicToLogic(
aBR,
MapMode(getSdrModelFromSdrObject().GetScaleUnit()),
MapMode(aMapUnit)));
const tools::Rectangle aNewRect(
aTL2,
aBR2);
xVisualObject->setVisualAreaSize(
GetAspect(),
awt::Size(
aNewRect.GetWidth(),
aNewRect.GetHeight()));
}
}
}
@@ -1610,9 +1605,10 @@
void SdrOle2Obj::NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact)
{
if( pModel && !pModel->isLocked() )
if(!getSdrModelFromSdrObject().isLocked())
{
GetObjRef();
if ( mpImpl->mxObjRef.is() && ( mpImpl->mxObjRef->getStatus( GetAspect() ) & embed::EmbedMisc::MS_EMBED_RECOMPOSEONRESIZE ) )
{
// if the object needs recompose on resize
@@ -1623,7 +1619,8 @@
}
SdrRectObj::NbcResize(rRef,xFact,yFact);
if( pModel && !pModel->isLocked() )
if( !getSdrModelFromSdrObject().isLocked() )
ImpSetVisAreaSize();
}
@@ -1631,7 +1628,7 @@
{
SdrRectObj::SetGeoData(rGeo);
if( pModel && !pModel->isLocked() )
if( !getSdrModelFromSdrObject().isLocked() )
ImpSetVisAreaSize();
}
@@ -1639,7 +1636,7 @@
{
SdrRectObj::NbcSetSnapRect(rRect);
if( pModel && !pModel->isLocked() )
if( !getSdrModelFromSdrObject().isLocked() )
ImpSetVisAreaSize();
if ( mpImpl->mxObjRef.is() && IsChart() )
@@ -1655,7 +1652,7 @@
{
SdrRectObj::NbcSetLogicRect(rRect);
if( pModel && !pModel->isLocked() )
if( !getSdrModelFromSdrObject().isLocked() )
ImpSetVisAreaSize();
}
@@ -1686,7 +1683,7 @@
{
SdrRectObj::NbcMove(rSize);
if( pModel && !pModel->isLocked() )
if( !getSdrModelFromSdrObject().isLocked() )
ImpSetVisAreaSize();
}
@@ -1758,7 +1755,8 @@
return true;
bool bUnloaded = false;
if ( pModel && mpImpl->mxObjRef.is() )
if ( mpImpl->mxObjRef.is() )
{
bUnloaded = Unload( mpImpl->mxObjRef.GetObject(), GetAspect() );
}
@@ -1768,12 +1766,14 @@
void SdrOle2Obj::GetObjRef_Impl()
{
if ( !mpImpl->mxObjRef.is() && !mpImpl->aPersistName.isEmpty() && pModel && pModel->GetPersist() )
if ( !mpImpl->mxObjRef.is() && !mpImpl->aPersistName.isEmpty() && getSdrModelFromSdrObject().GetPersist() )
{
// Only try loading if it did not went wrong up to now
if(!mpImpl->mbLoadingOLEObjectFailed)
{
mpImpl->mxObjRef.Assign( pModel->GetPersist()->getEmbeddedObjectContainer().GetEmbeddedObject( mpImpl->aPersistName ), GetAspect() );
mpImpl->mxObjRef.Assign(
getSdrModelFromSdrObject().GetPersist()->getEmbeddedObjectContainer().GetEmbeddedObject(mpImpl->aPersistName),
GetAspect());
mpImpl->mbTypeAsked = false;
CheckFileLink_Impl();
@@ -1793,7 +1793,7 @@
if( !IsEmptyPresObj() )
{
// remember modified status of model
const bool bWasChanged = pModel && pModel->IsChanged();
const bool bWasChanged(getSdrModelFromSdrObject().IsChanged());
// perhaps preview not valid anymore
// This line changes the modified state of the model
@@ -1802,9 +1802,9 @@
// if status was not set before, force it back
// to not set, so that SetGraphic(0) above does not
// set the modified state of the model.
if(!bWasChanged && pModel && pModel->IsChanged())
if(!bWasChanged && getSdrModelFromSdrObject().IsChanged())
{
pModel->SetChanged( false );
getSdrModelFromSdrObject().SetChanged( false );
}
}
}
@@ -1889,9 +1889,7 @@
uno::Reference< frame::XModel > SdrOle2Obj::GetParentXModel() const
{
uno::Reference< frame::XModel > xDoc;
if ( pModel )
xDoc.set( pModel->getUnoModel(),uno::UNO_QUERY);
uno::Reference< frame::XModel > xDoc(getSdrModelFromSdrObject().getUnoModel(), uno::UNO_QUERY);
return xDoc;
}
@@ -1899,10 +1897,10 @@
{
// TODO/LEAN: to avoid rounding errors scaling always uses the VisArea.
// If we don't cache it for own objects also we must load the object here
if ( !mpImpl->mxObjRef.is() || !pModel )
if (!mpImpl->mxObjRef.is())
return false;
MapMode aMapMode( pModel->GetScaleUnit() );
MapMode aMapMode(getSdrModelFromSdrObject().GetScaleUnit());
aObjAreaSize = mpImpl->mxObjRef.GetSize( &aMapMode );
Size aSize = maRect.GetSize();
@@ -1919,7 +1917,7 @@
bool SdrOle2Obj::AddOwnLightClient()
{
// The Own Light Client must be registered in object only using this method!
if ( !SfxInPlaceClient::GetClient( dynamic_cast<SfxObjectShell*>(pModel->GetPersist()), mpImpl->mxObjRef.GetObject() )
if ( !SfxInPlaceClient::GetClient( dynamic_cast<SfxObjectShell*>(getSdrModelFromSdrObject().GetPersist()), mpImpl->mxObjRef.GetObject() )
&& !( mpImpl->mxLightClient.is() && mpImpl->mxObjRef->getClientSite() == uno::Reference< embed::XEmbeddedClient >( mpImpl->mxLightClient.get() ) ) )
{
Connect();
diff --git a/svx/source/svdraw/svdopage.cxx b/svx/source/svdraw/svdopage.cxx
index a2a6592..af38237 100644
--- a/svx/source/svdraw/svdopage.cxx
+++ b/svx/source/svdraw/svdopage.cxx
@@ -64,9 +64,11 @@
}
}
SdrPageObj::SdrPageObj(SdrPage* pNewPage)
: mpShownPage(pNewPage)
SdrPageObj::SdrPageObj(
SdrModel& rSdrModel,
SdrPage* pNewPage)
: SdrObject(rSdrModel),
mpShownPage(pNewPage)
{
if(mpShownPage)
{
@@ -74,8 +76,12 @@
}
}
SdrPageObj::SdrPageObj(const tools::Rectangle& rRect, SdrPage* pNewPage)
: mpShownPage(pNewPage)
SdrPageObj::SdrPageObj(
SdrModel& rSdrModel,
const tools::Rectangle& rRect,
SdrPage* pNewPage)
: SdrObject(rSdrModel),
mpShownPage(pNewPage)
{
if(mpShownPage)
{
@@ -144,9 +150,9 @@
rInfo.bCanConvToPolyLineToArea=false;
}
SdrPageObj* SdrPageObj::Clone() const
SdrPageObj* SdrPageObj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< SdrPageObj >();
return CloneHelper< SdrPageObj >(pTargetModel);
}
SdrPageObj& SdrPageObj::operator=(const SdrPageObj& rObj)
diff --git a/svx/source/svdraw/svdopath.cxx b/svx/source/svdraw/svdopath.cxx
index 5cf8dd5..fc991ab 100644
--- a/svx/source/svdraw/svdopath.cxx
+++ b/svx/source/svdraw/svdopath.cxx
@@ -941,27 +941,27 @@
{
aStr += SdrModel::GetAngleString(std::abs(pU->nCircRelAngle))
+ " r="
+ mrSdrPathObject.GetModel()->GetMetricString(pU->nCircRadius, true);
+ mrSdrPathObject.getSdrModelFromSdrObject().GetMetricString(pU->nCircRadius, true);
}
aStr += "dx="
+ mrSdrPathObject.GetModel()->GetMetricString(aNow.X(), true)
+ mrSdrPathObject.getSdrModelFromSdrObject().GetMetricString(aNow.X(), true)
+ " dy="
+ mrSdrPathObject.GetModel()->GetMetricString(aNow.Y(), true);
+ mrSdrPathObject.getSdrModelFromSdrObject().GetMetricString(aNow.Y(), true);
if(!IsFreeHand(meObjectKind))
{
sal_Int32 nLen(GetLen(aNow));
sal_Int32 nAngle(GetAngle(aNow));
aStr += " l="
+ mrSdrPathObject.GetModel()->GetMetricString(nLen, true)
+ mrSdrPathObject.getSdrModelFromSdrObject().GetMetricString(nLen, true)
+ " "
+ SdrModel::GetAngleString(nAngle);
}
aStr += ")";
}
else if(!mrSdrPathObject.GetModel() || !pHdl)
else if(!pHdl)
{
// #i103058# fallback when no model and/or Handle, both needed
// for else-path
@@ -1011,9 +1011,9 @@
aStr.clear();
aStr += "dx="
+ mrSdrPathObject.GetModel()->GetMetricString(aNow.X() - aBeg.X(), true)
+ mrSdrPathObject.getSdrModelFromSdrObject().GetMetricString(aNow.X() - aBeg.X(), true)
+ " dy="
+ mrSdrPathObject.GetModel()->GetMetricString(aNow.Y() - aBeg.Y(), true);
+ mrSdrPathObject.getSdrModelFromSdrObject().GetMetricString(aNow.Y() - aBeg.Y(), true);
if(!pDragData->IsMultiPointDrag())
{
@@ -1040,7 +1040,7 @@
sal_Int32 nLen(GetLen(aNow));
sal_Int32 nAngle(GetAngle(aNow));
aStr += " l="
+ mrSdrPathObject.GetModel()->GetMetricString(nLen, true)
+ mrSdrPathObject.getSdrModelFromSdrObject().GetMetricString(nLen, true)
+ " "
+ SdrModel::GetAngleString(nAngle);
}
@@ -1083,7 +1083,7 @@
sal_Int32 nLen(GetLen(aPt));
sal_Int32 nAngle(GetAngle(aPt));
aStr += " l="
+ mrSdrPathObject.GetModel()->GetMetricString(nLen, true)
+ mrSdrPathObject.getSdrModelFromSdrObject().GetMetricString(nLen, true)
+ " "
+ SdrModel::GetAngleString(nAngle);
}
@@ -1101,7 +1101,7 @@
sal_Int32 nLen(GetLen(aPt));
sal_Int32 nAngle(GetAngle(aPt));
aStr += "l="
+ mrSdrPathObject.GetModel()->GetMetricString(nLen, true)
+ mrSdrPathObject.getSdrModelFromSdrObject().GetMetricString(nLen, true)
+ " "
+ SdrModel::GetAngleString(nAngle);
}
@@ -1628,14 +1628,21 @@
}
SdrPathObj::SdrPathObj(SdrObjKind eNewKind)
: meKind(eNewKind)
SdrPathObj::SdrPathObj(
SdrModel& rSdrModel,
SdrObjKind eNewKind)
: SdrTextObj(rSdrModel),
meKind(eNewKind)
{
bClosedObj = IsClosed();
}
SdrPathObj::SdrPathObj(SdrObjKind eNewKind, const basegfx::B2DPolyPolygon& rPathPoly)
: maPathPolygon(rPathPoly),
SdrPathObj::SdrPathObj(
SdrModel& rSdrModel,
SdrObjKind eNewKind,
const basegfx::B2DPolyPolygon& rPathPoly)
: SdrTextObj(rSdrModel),
maPathPolygon(rPathPoly),
meKind(eNewKind)
{
bClosedObj = IsClosed();
@@ -1821,9 +1828,9 @@
return sal_uInt16(meKind);
}
SdrPathObj* SdrPathObj::Clone() const
SdrPathObj* SdrPathObj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< SdrPathObj >();
return CloneHelper< SdrPathObj >(pTargetModel);
}
SdrPathObj& SdrPathObj::operator=(const SdrPathObj& rObj)
@@ -2879,7 +2886,7 @@
}
// position maybe relative to anchorpos, convert
if( pModel && pModel->IsWriter() )
if( getSdrModelFromSdrObject().IsWriter() )
{
if(GetAnchorPos().X() || GetAnchorPos().Y())
{
@@ -2988,7 +2995,7 @@
}
}
if( pModel && pModel->IsWriter() )
if( getSdrModelFromSdrObject().IsWriter() )
{
// if anchor is used, make position relative to it
if(GetAnchorPos().X() || GetAnchorPos().Y())
diff --git a/svx/source/svdraw/svdorect.cxx b/svx/source/svdraw/svdorect.cxx
index 7f85da4..e68b38c 100644
--- a/svx/source/svdraw/svdorect.cxx
+++ b/svx/source/svdraw/svdorect.cxx
@@ -62,21 +62,26 @@
}
SdrRectObj::SdrRectObj()
: mpXPoly(nullptr)
{
bClosedObj=true;
}
SdrRectObj::SdrRectObj(const tools::Rectangle& rRect)
: SdrTextObj(rRect),
SdrRectObj::SdrRectObj(SdrModel& rSdrModel)
: SdrTextObj(rSdrModel),
mpXPoly(nullptr)
{
bClosedObj=true;
}
SdrRectObj::SdrRectObj(SdrObjKind eNewTextKind)
: SdrTextObj(eNewTextKind),
SdrRectObj::SdrRectObj(
SdrModel& rSdrModel,
const tools::Rectangle& rRect)
: SdrTextObj(rSdrModel, rRect),
mpXPoly(nullptr)
{
bClosedObj=true;
}
SdrRectObj::SdrRectObj(
SdrModel& rSdrModel,
SdrObjKind eNewTextKind)
: SdrTextObj(rSdrModel, eNewTextKind),
mpXPoly(nullptr)
{
DBG_ASSERT(eTextKind==OBJ_TEXT || eTextKind==OBJ_TEXTEXT ||
@@ -85,8 +90,11 @@
bClosedObj=true;
}
SdrRectObj::SdrRectObj(SdrObjKind eNewTextKind, const tools::Rectangle& rRect)
: SdrTextObj(eNewTextKind,rRect),
SdrRectObj::SdrRectObj(
SdrModel& rSdrModel,
SdrObjKind eNewTextKind,
const tools::Rectangle& rRect)
: SdrTextObj(rSdrModel, eNewTextKind, rRect),
mpXPoly(nullptr)
{
DBG_ASSERT(eTextKind==OBJ_TEXT || eTextKind==OBJ_TEXTEXT ||
@@ -99,21 +107,6 @@
{
}
SdrRectObj& SdrRectObj::operator=(const SdrRectObj& rCopy)
{
if ( this == &rCopy )
return *this;
SdrTextObj::operator=( rCopy );
if ( rCopy.mpXPoly )
mpXPoly.reset( new XPolygon( *rCopy.mpXPoly ) );
else
mpXPoly.reset();
return *this;
}
void SdrRectObj::SetXPolyDirty()
{
mpXPoly.reset();
@@ -266,9 +259,24 @@
return ImpGetResStr(pResId);
}
SdrRectObj* SdrRectObj::Clone() const
SdrRectObj* SdrRectObj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< SdrRectObj >();
return CloneHelper< SdrRectObj >(pTargetModel);
}
SdrRectObj& SdrRectObj::operator=(const SdrRectObj& rCopy)
{
if ( this == &rCopy )
return *this;
SdrTextObj::operator=( rCopy );
if ( rCopy.mpXPoly )
mpXPoly.reset( new XPolygon( *rCopy.mpXPoly ) );
else
mpXPoly.reset();
return *this;
}
basegfx::B2DPolyPolygon SdrRectObj::TakeXorPoly() const
diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx
index cf4448f..63ca33f 100644
--- a/svx/source/svdraw/svdotext.cxx
+++ b/svx/source/svdraw/svdotext.cxx
@@ -64,25 +64,20 @@
using namespace com::sun::star;
// BaseProperties section
sdr::properties::BaseProperties* SdrTextObj::CreateObjectSpecificProperties()
{
return new sdr::properties::TextProperties(*this);
}
// DrawContact section
sdr::contact::ViewContact* SdrTextObj::CreateObjectSpecificViewContact()
{
return new sdr::contact::ViewContactOfTextObj(*this);
}
SdrTextObj::SdrTextObj()
: SdrAttrObj(),
SdrTextObj::SdrTextObj(SdrModel& rSdrModel)
: SdrAttrObj(rSdrModel),
mpText(nullptr),
pEdtOutl(nullptr),
eTextKind(OBJ_TEXT)
@@ -102,8 +97,10 @@
mbInDownScale = false;
}
SdrTextObj::SdrTextObj(const tools::Rectangle& rNewRect)
: SdrAttrObj(),
SdrTextObj::SdrTextObj(
SdrModel& rSdrModel,
const tools::Rectangle& rNewRect)
: SdrAttrObj(rSdrModel),
maRect(rNewRect),
mpText(nullptr),
pEdtOutl(nullptr),
@@ -125,8 +122,10 @@
mbSupportTextIndentingOnLineWidthChange = true;
}
SdrTextObj::SdrTextObj(SdrObjKind eNewTextKind)
: SdrAttrObj(),
SdrTextObj::SdrTextObj(
SdrModel& rSdrModel,
SdrObjKind eNewTextKind)
: SdrAttrObj(rSdrModel),
mpText(nullptr),
pEdtOutl(nullptr),
eTextKind(eNewTextKind)
@@ -146,8 +145,11 @@
mbSupportTextIndentingOnLineWidthChange = true;
}
SdrTextObj::SdrTextObj(SdrObjKind eNewTextKind, const tools::Rectangle& rNewRect)
: SdrAttrObj(),
SdrTextObj::SdrTextObj(
SdrModel& rSdrModel,
SdrObjKind eNewTextKind,
const tools::Rectangle& rNewRect)
: SdrAttrObj(rSdrModel),
maRect(rNewRect),
mpText(nullptr),
pEdtOutl(nullptr),
@@ -171,25 +173,19 @@
SdrTextObj::~SdrTextObj()
{
if( pModel )
{
SdrOutliner& rOutl = pModel->GetHitTestOutliner();
if( rOutl.GetTextObj() == this )
rOutl.SetTextObj( nullptr );
}
SdrOutliner& rOutl(getSdrModelFromSdrObject().GetHitTestOutliner());
if( rOutl.GetTextObj() == this )
rOutl.SetTextObj( nullptr );
mpText.reset();
ImpDeregisterLink();
}
void SdrTextObj::FitFrameToTextSize()
{
DBG_ASSERT(pModel!=nullptr,"SdrTextObj::FitFrameToTextSize(): pModel=NULL!");
ImpJustifyRect(maRect);
SdrText* pText = getActiveText();
if( pText==nullptr || !pText->GetOutlinerParaObject() || pModel==nullptr)
if(pText==nullptr || !pText->GetOutlinerParaObject())
return;
SdrOutliner& rOutliner=ImpGetDrawOutliner();
@@ -478,39 +474,6 @@
}
}
void SdrTextObj::SetModel(SdrModel* pNewModel)
{
SdrModel* pOldModel=pModel;
bool bLinked=IsLinkedText();
bool bChg=pNewModel!=pModel;
if (bLinked && bChg)
{
ImpDeregisterLink();
}
SdrAttrObj::SetModel(pNewModel);
if( bChg )
{
if( pNewModel != nullptr && pOldModel != nullptr )
SetTextSizeDirty();
sal_Int32 nCount = getTextCount();
for( sal_Int32 nText = 0; nText < nCount; nText++ )
{
SdrText* pText = getText( nText );
if( pText )
pText->SetModel( pNewModel );
}
}
if (bLinked && bChg)
{
ImpRegisterLink();
}
}
void SdrTextObj::NbcSetEckenradius(long nRad)
{
SetObjectItem(makeSdrEckenradiusItem(nRad));
@@ -524,7 +487,7 @@
// Only do this for text frame.
return;
if (pModel && pModel->IsPasteResize())
if (getSdrModelFromSdrObject().IsPasteResize())
// Don't do this during paste resize.
return;
@@ -754,11 +717,9 @@
if (pPara)
{
bool bHitTest = false;
if( pModel )
bHitTest = &pModel->GetHitTestOutliner() == &rOutliner;
const bool bHitTest(&getSdrModelFromSdrObject().GetHitTestOutliner() == &rOutliner);
const SdrTextObj* pTestObj = rOutliner.GetTextObj();
if( !pTestObj || !bHitTest || pTestObj != this ||
pTestObj->GetOutlinerParaObject() != pOutlinerParaObject )
{
@@ -1049,9 +1010,9 @@
return sName;
}
SdrTextObj* SdrTextObj::Clone() const
SdrTextObj* SdrTextObj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< SdrTextObj >();
return CloneHelper< SdrTextObj >(pTargetModel);
}
SdrTextObj& SdrTextObj::operator=(const SdrTextObj& rObj)
@@ -1111,7 +1072,7 @@
basegfx::B2DPolyPolygon aRetval(SdrAttrObj::TakeContour());
// and now add the BoundRect of the text, if necessary
if ( pModel && GetOutlinerParaObject() && !IsFontwork() && !IsContourTextFrame() )
if ( GetOutlinerParaObject() && !IsFontwork() && !IsContourTextFrame() )
{
// using Clone()-Paint() strategy inside TakeContour() leaves a destroyed
// SdrObject as pointer in DrawOutliner. Set *this again in fetching the outliner
@@ -1213,7 +1174,7 @@
SdrOutliner& SdrTextObj::ImpGetDrawOutliner() const
{
SdrOutliner& rOutl=pModel->GetDrawOutliner(this);
SdrOutliner& rOutl(getSdrModelFromSdrObject().GetDrawOutliner(this));
// Code extracted to ImpInitDrawOutliner()
ImpInitDrawOutliner( rOutl );
@@ -1261,7 +1222,7 @@
double SdrTextObj::GetFontScaleY() const
{
SdrText* pText = getActiveText();
if (pText == nullptr || !pText->GetOutlinerParaObject() || pModel == nullptr)
if (pText == nullptr || !pText->GetOutlinerParaObject())
return 1.0;
SdrOutliner& rOutliner = ImpGetDrawOutliner();
@@ -1403,17 +1364,21 @@
tools::Rectangle aAnchorRect;
Fraction aFitXCorrection(1,1);
bool bContourFrame=IsContourTextFrame();
const bool bContourFrame(IsContourTextFrame());
const MapMode aMapMode(
getSdrModelFromSdrObject().GetScaleUnit(),
Point(0,0),
getSdrModelFromSdrObject().GetScaleFraction(),
getSdrModelFromSdrObject().GetScaleFraction());
if( GetModel() )
{
MapMode aMapMode(GetModel()->GetScaleUnit(), Point(0,0),
GetModel()->GetScaleFraction(),
GetModel()->GetScaleFraction());
rOutl.SetRefMapMode(aMapMode);
}
ImpSetupDrawOutlinerForPaint( bContourFrame, rOutl, aTextRect, aAnchorRect, rPaintRect, aFitXCorrection );
rOutl.SetRefMapMode(aMapMode);
ImpSetupDrawOutlinerForPaint(
bContourFrame,
rOutl,
aTextRect,
aAnchorRect,
rPaintRect,
aFitXCorrection);
}
@@ -1561,7 +1526,7 @@
//if (!IsChainable())
// return NULL;
return pModel->GetTextChain();
return getSdrModelFromSdrObject().GetTextChain();
}
bool SdrTextObj::IsVerticalWriting() const
@@ -1670,7 +1635,7 @@
basegfx::B2DTuple aTranslate(aRectangle.Left(), aRectangle.Top());
// position maybe relative to anchorpos, convert
if( pModel && pModel->IsWriter() )
if( getSdrModelFromSdrObject().IsWriter() )
{
if(GetAnchorPos().X() || GetAnchorPos().Y())
{
@@ -1769,7 +1734,7 @@
}
// if anchor is used, make position relative to it
if( pModel && pModel->IsWriter() )
if( getSdrModelFromSdrObject().IsWriter() )
{
if(GetAnchorPos().X() || GetAnchorPos().Y())
{
diff --git a/svx/source/svdraw/svdotextdecomposition.cxx b/svx/source/svdraw/svdotextdecomposition.cxx
index af6977f..b507369 100644
--- a/svx/source/svdraw/svdotextdecomposition.cxx
+++ b/svx/source/svdraw/svdotextdecomposition.cxx
@@ -973,8 +973,9 @@
// Usual processing - always grow in one of directions
bool bAllowGrowVertical = !bVerticalWriting;
bool bAllowGrowHorizontal = bVerticalWriting;
// Compatibility mode for tdf#99729
if (pModel->IsAnchoredTextOverflowLegacy())
if (getSdrModelFromSdrObject().IsAnchoredTextOverflowLegacy())
{
bAllowGrowVertical = bHorizontalIsBlock;
bAllowGrowHorizontal = bVerticalIsBlock;
@@ -1466,7 +1467,7 @@
if (bIsOverflow && !IsInEditMode()) {
// Initialize Chaining Outliner
SdrOutliner &rChainingOutl = pModel->GetChainingOutliner(this);
SdrOutliner &rChainingOutl(getSdrModelFromSdrObject().GetChainingOutliner(this));
ImpInitDrawOutliner( rChainingOutl );
rChainingOutl.SetUpdateMode(true);
// We must pass the chaining outliner otherwise we would mess up decomposition
diff --git a/svx/source/svdraw/svdotxat.cxx b/svx/source/svdraw/svdotxat.cxx
index f4c9528..e88e555 100644
--- a/svx/source/svdraw/svdotxat.cxx
+++ b/svx/source/svdraw/svdotxat.cxx
@@ -62,10 +62,6 @@
// Not a text frame. Bail out.
return false;
if (!pModel)
// Model doesn't exist. Bail out.
return false;
if (rR.IsEmpty())
// Empty rectangle.
return false;
@@ -95,7 +91,7 @@
aNewSize.AdjustWidth( -1 ); aNewSize.AdjustHeight( -1 );
Size aMaxSiz(100000, 100000);
Size aTmpSiz = pModel->GetMaxObjSize();
Size aTmpSiz(getSdrModelFromSdrObject().GetMaxObjSize());
if (aTmpSiz.Width())
aMaxSiz.setWidth( aTmpSiz.Width() );
@@ -312,7 +308,7 @@
void SdrTextObj::ImpSetTextStyleSheetListeners()
{
SfxStyleSheetBasePool* pStylePool=pModel!=nullptr ? pModel->GetStyleSheetPool() : nullptr;
SfxStyleSheetBasePool* pStylePool(getSdrModelFromSdrObject().GetStyleSheetPool());
if (pStylePool!=nullptr)
{
std::vector<OUString> aStyleNames;
diff --git a/svx/source/svdraw/svdotxed.cxx b/svx/source/svdraw/svdotxed.cxx
index 3290435..bb3e60d 100644
--- a/svx/source/svdraw/svdotxed.cxx
+++ b/svx/source/svdraw/svdotxed.cxx
@@ -49,7 +49,7 @@
if ( !IsOutlText() )
nOutlinerMode = OutlinerMode::TextObject;
rOutl.Init( nOutlinerMode );
rOutl.SetRefDevice( pModel->GetRefDevice() );
rOutl.SetRefDevice(getSdrModelFromSdrObject().GetRefDevice());
bool bFitToSize(IsFitToSize());
bool bContourFrame=IsContourTextFrame();
@@ -146,11 +146,9 @@
Size aAnkSiz(aViewInit.GetSize());
aAnkSiz.AdjustWidth( -1 ); aAnkSiz.AdjustHeight( -1 ); // because GetSize() adds 1
Size aMaxSiz(1000000,1000000);
if (pModel!=nullptr) {
Size aTmpSiz(pModel->GetMaxObjSize());
if (aTmpSiz.Width()!=0) aMaxSiz.setWidth(aTmpSiz.Width() );
if (aTmpSiz.Height()!=0) aMaxSiz.setHeight(aTmpSiz.Height() );
}
Size aTmpSiz(getSdrModelFromSdrObject().GetMaxObjSize());
if (aTmpSiz.Width()!=0) aMaxSiz.setWidth(aTmpSiz.Width() );
if (aTmpSiz.Height()!=0) aMaxSiz.setHeight(aTmpSiz.Height() );
// Done earlier since used in else tree below
SdrTextHorzAdjust eHAdj(GetTextHorizontalAdjust());
diff --git a/svx/source/svdraw/svdotxln.cxx b/svx/source/svdraw/svdotxln.cxx
index 75964d9..27d4b96 100644
--- a/svx/source/svdraw/svdotxln.cxx
+++ b/svx/source/svdraw/svdotxln.cxx
@@ -67,8 +67,9 @@
const OUString& /*rMimeType*/, const css::uno::Any & /*rValue */)
{
bool bForceReload = false;
SdrModel* pModel = pSdrObj ? pSdrObj->GetModel() : nullptr;
sfx2::LinkManager* pLinkManager= pModel ? pModel->GetLinkManager() : nullptr;
SdrModel* pModel(pSdrObj ? &pSdrObj->getSdrModelFromSdrObject() : nullptr);
sfx2::LinkManager* pLinkManager(pModel ? pModel->GetLinkManager() : nullptr);
if( pLinkManager )
{
ImpSdrObjTextLinkUserData* pData=pSdrObj->GetLinkUserData();
@@ -254,7 +255,7 @@
void SdrTextObj::ImpRegisterLink()
{
ImpSdrObjTextLinkUserData* pData=GetLinkUserData();
sfx2::LinkManager* pLinkManager=pModel!=nullptr ? pModel->GetLinkManager() : nullptr;
sfx2::LinkManager* pLinkManager(getSdrModelFromSdrObject().GetLinkManager());
if (pLinkManager!=nullptr && pData!=nullptr && pData->pLink==nullptr) { // don't register twice
pData->pLink = new ImpSdrObjTextLink(this);
pLinkManager->InsertFileLink(*pData->pLink,OBJECT_CLIENT_FILE,pData->aFileName,
@@ -266,7 +267,7 @@
void SdrTextObj::ImpDeregisterLink()
{
ImpSdrObjTextLinkUserData* pData=GetLinkUserData();
sfx2::LinkManager* pLinkManager=pModel!=nullptr ? pModel->GetLinkManager() : nullptr;
sfx2::LinkManager* pLinkManager(getSdrModelFromSdrObject().GetLinkManager());
if (pLinkManager!=nullptr && pData!=nullptr && pData->pLink!=nullptr) { // don't register twice
// when doing Remove, *pLink is deleted implicitly
pLinkManager->Remove( pData->pLink.get() );
diff --git a/svx/source/svdraw/svdotxtr.cxx b/svx/source/svdraw/svdotxtr.cxx
index 40eca10..1a6d4a5 100644
--- a/svx/source/svdraw/svdotxtr.cxx
+++ b/svx/source/svdraw/svdotxtr.cxx
@@ -175,7 +175,7 @@
AdaptTextMinSize();
if(bTextFrame && (!pModel || !pModel->IsPasteResize()))
if(bTextFrame && !getSdrModelFromSdrObject().IsPasteResize())
{
NbcAdjustTextFrameWidthAndHeight();
}
@@ -313,7 +313,7 @@
if(nResultCount)
{
// prepare own target
SdrObjGroup* pGroup = new SdrObjGroup();
SdrObjGroup* pGroup = new SdrObjGroup(getSdrModelFromSdrObject());
SdrObjList* pObjectList = pGroup->GetSubList();
// process results
@@ -355,7 +355,10 @@
aAttributeSet.Put(XFillStyleItem(drawing::FillStyle_SOLID));
// create filled SdrPathObj
pPathObj = new SdrPathObj(OBJ_PATHFILL, aPolyPolygon);
pPathObj = new SdrPathObj(
getSdrModelFromSdrObject(),
OBJ_PATHFILL,
aPolyPolygon);
}
else
{
@@ -366,18 +369,16 @@
aAttributeSet.Put(XFillStyleItem(drawing::FillStyle_NONE));
// create line SdrPathObj
pPathObj = new SdrPathObj(OBJ_PATHLINE, aPolyPolygon);
pPathObj = new SdrPathObj(
getSdrModelFromSdrObject(),
OBJ_PATHLINE,
aPolyPolygon);
}
// copy basic information from original
pPathObj->ImpSetAnchorPos(GetAnchorPos());
pPathObj->NbcSetLayer(GetLayer());
if(GetModel())
{
pPathObj->SetModel(GetModel());
pPathObj->NbcSetStyleSheet(GetStyleSheet(), true);
}
pPathObj->NbcSetStyleSheet(GetStyleSheet(), true);
// apply prepared ItemSet and add to target
pPathObj->SetMergedItemSet(aAttributeSet);
@@ -433,7 +434,10 @@
ePathKind = bClosed ? OBJ_POLY : OBJ_PLIN;
}
SdrPathObj* pPathObj = new SdrPathObj(ePathKind, aB2DPolyPolygon);
SdrPathObj* pPathObj = new SdrPathObj(
getSdrModelFromSdrObject(),
ePathKind,
aB2DPolyPolygon);
if(bBezier)
{
@@ -443,18 +447,11 @@
pPathObj->ImpSetAnchorPos(aAnchor);
pPathObj->NbcSetLayer(GetLayer());
if(pModel)
{
pPathObj->SetModel(pModel);
sdr::properties::ItemChangeBroadcaster aC(*pPathObj);
pPathObj->ClearMergedItem();
pPathObj->SetMergedItemSet(GetObjectItemSet());
pPathObj->GetProperties().BroadcastItemChange(aC);
pPathObj->NbcSetStyleSheet(GetStyleSheet(), true);
}
sdr::properties::ItemChangeBroadcaster aC(*pPathObj);
pPathObj->ClearMergedItem();
pPathObj->SetMergedItemSet(GetObjectItemSet());
pPathObj->GetProperties().BroadcastItemChange(aC);
pPathObj->NbcSetStyleSheet(GetStyleSheet(), true);
return pPathObj;
}
@@ -489,7 +486,7 @@
else
{
// not yet a group, create one and add partial and new shapes
SdrObjGroup* pGrp=new SdrObjGroup;
SdrObjGroup* pGrp=new SdrObjGroup(getSdrModelFromSdrObject());
SdrObjList* pOL=pGrp->GetSubList();
pOL->InsertObject(pObj);
pOL->InsertObject(pText);
diff --git a/svx/source/svdraw/svdouno.cxx b/svx/source/svdraw/svdouno.cxx
index 6e364c3..4a0e071 100644
--- a/svx/source/svdraw/svdouno.cxx
+++ b/svx/source/svdraw/svdouno.cxx
@@ -145,9 +145,11 @@
}
}
SdrUnoObj::SdrUnoObj(const OUString& rModelName)
: m_pImpl( new SdrUnoObjDataHolder )
SdrUnoObj::SdrUnoObj(
SdrModel& rSdrModel,
const OUString& rModelName)
: SdrRectObj(rSdrModel),
m_pImpl( new SdrUnoObjDataHolder )
{
bIsUnoObj = true;
@@ -158,9 +160,12 @@
CreateUnoControlModel(rModelName);
}
SdrUnoObj::SdrUnoObj(const OUString& rModelName,
const uno::Reference< lang::XMultiServiceFactory >& rxSFac)
: m_pImpl( new SdrUnoObjDataHolder )
SdrUnoObj::SdrUnoObj(
SdrModel& rSdrModel,
const OUString& rModelName,
const uno::Reference< lang::XMultiServiceFactory >& rxSFac)
: SdrRectObj(rSdrModel),
m_pImpl( new SdrUnoObjDataHolder )
{
bIsUnoObj = true;
@@ -250,9 +255,9 @@
return ImpGetResStr(STR_ObjNamePluralUno);
}
SdrUnoObj* SdrUnoObj::Clone() const
SdrUnoObj* SdrUnoObj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< SdrUnoObj >();
return CloneHelper< SdrUnoObj >(pTargetModel);
}
SdrUnoObj& SdrUnoObj::operator= (const SdrUnoObj& rObj)
@@ -328,38 +333,6 @@
return false;
}
bool SdrUnoObj::supportsFullDrag() const
{
// override to have the possibility to enable/disable in debug and
// to check some things out. Current solution is working, so default is
// enabled
static bool bDoSupportFullDrag(true);
return bDoSupportFullDrag;
}
SdrObject* SdrUnoObj::getFullDragClone() const
{
SdrObject* pRetval = nullptr;
static bool bHandleSpecial(false);
if(bHandleSpecial)
{
// special handling for SdrUnoObj (FormControl). Create a SdrGrafObj
// for drag containing the graphical representation. This does not work too
// well, so the default is to simply clone
pRetval = new SdrGrafObj(SdrDragView::GetObjGraphic(GetModel(), this), GetLogicRect());
}
else
{
// call parent (simply clone)
pRetval = SdrRectObj::getFullDragClone();
}
return pRetval;
}
void SdrUnoObj::NbcSetLayer( SdrLayerID _nLayer )
{
if ( GetLayer() == _nLayer )
diff --git a/svx/source/svdraw/svdovirt.cxx b/svx/source/svdraw/svdovirt.cxx
index 2ffcdc3..4306ecd5 100644
--- a/svx/source/svdraw/svdovirt.cxx
+++ b/svx/source/svdraw/svdovirt.cxx
@@ -42,8 +42,10 @@
return new sdr::contact::ViewContactOfVirtObj(*this);
}
SdrVirtObj::SdrVirtObj(SdrObject& rNewObj):
SdrVirtObj::SdrVirtObj(
SdrModel& rSdrModel,
SdrObject& rNewObj)
: SdrObject(rSdrModel),
rRefObj(rNewObj)
{
bVirtObj=true; // this is only a virtual object
@@ -56,7 +58,6 @@
rRefObj.DelReference(*this);
}
const SdrObject& SdrVirtObj::GetReferencedObj() const
{
return rRefObj;
@@ -81,13 +82,6 @@
aAnchor=rAnchorPos;
}
void SdrVirtObj::SetModel(SdrModel* pNewModel)
{
SdrObject::SetModel(pNewModel);
rRefObj.SetModel(pNewModel);
}
void SdrVirtObj::TakeObjInfo(SdrObjTransformInfoRec& rInfo) const
{
rRefObj.TakeObjInfo(rInfo);
@@ -128,15 +122,29 @@
aOutRect+=aAnchor;
}
SdrVirtObj* SdrVirtObj::Clone() const
SdrVirtObj* SdrVirtObj::Clone(SdrModel* pTargetModel) const
{
return new SdrVirtObj(rRefObj); // only a further reference
return CloneHelper< SdrVirtObj >(pTargetModel);
// TTTT not sure if the above works - how could SdrObjFactory::MakeNewObject
// create an object wit correct rRefObj (?) OTOH VirtObj probably needs not
// to be cloned ever - only used in Writer for multiple instances e.g. Header/Footer
// return new SdrVirtObj(
// getSdrModelFromSdrObject(),
// rRefObj); // only a further reference
}
SdrVirtObj& SdrVirtObj::operator=(const SdrVirtObj& rObj)
{ // reference different object??
{
SdrObject::operator=(rObj);
aAnchor=rObj.aAnchor;
// reference different object?? TTTT -> yes!
rRefObj.DelReference(*this);
rRefObj = rObj.rRefObj;
rRefObj.AddReference(*this);
aSnapRect = rObj.aSnapRect;
aAnchor = rObj.aAnchor;
return *this;
}
@@ -266,24 +274,11 @@
SdrObject* SdrVirtObj::getFullDragClone() const
{
static bool bSpecialHandling(false);
SdrObject* pRetval = nullptr;
if(bSpecialHandling)
{
// special handling for VirtObj. Do not create another
// reference to rRefObj, this would allow to change that
// one on drag. Instead, create a SdrGrafObj for drag containing
// the graphical representation
pRetval = new SdrGrafObj(SdrDragView::GetObjGraphic(GetModel(), this), GetLogicRect());
}
else
{
SdrObject& rReferencedObject = const_cast<SdrVirtObj*>(this)->ReferencedObj();
pRetval = new SdrGrafObj(SdrDragView::GetObjGraphic(GetModel(), &rReferencedObject), GetLogicRect());
}
return pRetval;
SdrObject& rReferencedObject = const_cast<SdrVirtObj*>(this)->ReferencedObj();
return new SdrGrafObj(
getSdrModelFromSdrObject(),
SdrDragView::GetObjGraphic(rReferencedObject),
GetLogicRect());
}
bool SdrVirtObj::beginSpecialDrag(SdrDragStat& rDrag) const
diff --git a/svx/source/svdraw/svdpage.cxx b/svx/source/svdraw/svdpage.cxx
index 7ff4129..2dff0a9 100644
--- a/svx/source/svdraw/svdpage.cxx
+++ b/svx/source/svdraw/svdpage.cxx
@@ -70,13 +70,12 @@
static const sal_Int32 InitialObjectContainerCapacity (64);
SdrObjList::SdrObjList(SdrModel* pNewModel, SdrPage* pNewPage):
maList(),
SdrObjList::SdrObjList(SdrPage* pNewPage)
: maList(),
mxNavigationOrder(),
mbIsNavigationOrderDirty(false)
{
maList.reserve(InitialObjectContainerCapacity);
pModel=pNewModel;
pPage=pNewPage;
pUpList=nullptr;
bObjOrdNumsDirty=false;
@@ -85,58 +84,46 @@
eListKind=SdrObjListKind::Unknown;
}
SdrObjList::SdrObjList():
maList(),
mxNavigationOrder(),
mbIsNavigationOrderDirty(false)
{
maList.reserve(InitialObjectContainerCapacity);
pModel=nullptr;
pPage=nullptr;
pUpList=nullptr;
bObjOrdNumsDirty=false;
bRectsDirty=false;
pOwnerObj=nullptr;
eListKind=SdrObjListKind::Unknown;
}
SdrObjList::~SdrObjList()
{
// To avoid that the Clear() method will broadcast changes when in destruction
// which would call virtual method (not allowed in destructor), the model is set
// to NULL here.
pModel = nullptr;
Clear(); // delete contents of container
}
void SdrObjList::lateInit(const SdrObjList& rSrcList)
SdrObjList* SdrObjList::CloneSdrObjList(SdrModel* pNewModel) const
{
SdrObjList* pObjList = new SdrObjList();
pObjList->lateInitSdrObjList(*this, pNewModel);
return pObjList;
}
void SdrObjList::lateInitSdrObjList(const SdrObjList& rSrcList, SdrModel* pNewModel)
{
// this function is only supposed to be called once, right after construction
assert(maList.empty());
eListKind=rSrcList.eListKind;
CopyObjects(rSrcList);
CopyObjects(rSrcList, pNewModel);
}
void SdrObjList::CopyObjects(const SdrObjList& rSrcList)
void SdrObjList::CopyObjects(const SdrObjList& rSrcList, SdrModel* pNewModel)
{
Clear();
bObjOrdNumsDirty=false;
bRectsDirty =false;
size_t nCloneErrCnt = 0;
const size_t nCount = rSrcList.GetObjCount();
for (size_t no=0; no<nCount; ++no) {
SdrObject* pSO=rSrcList.GetObj(no);
bObjOrdNumsDirty = false;
bRectsDirty = false;
size_t nCloneErrCnt(0);
const size_t nCount(rSrcList.GetObjCount());
SdrObject* pDO = pSO->Clone();
for (size_t no(0); no < nCount; ++no)
{
SdrObject* pSO(rSrcList.GetObj(no));
SdrObject* pDO(pSO->Clone(pNewModel));
if (pDO!=nullptr) {
pDO->SetModel(pModel);
if(nullptr != pDO)
{
pDO->SetPage(pPage);
NbcInsertObject(pDO, SAL_MAX_SIZE);
} else {
}
else
{
nCloneErrCnt++;
}
}
@@ -209,9 +196,9 @@
void SdrObjList::Clear()
{
bool bObjectsRemoved(false);
SdrModel* pSdrModelFromRemovedSdrObject(nullptr);
while( ! maList.empty())
while(!maList.empty())
{
// remove last object from list
SdrObject* pObj = maList.back();
@@ -221,22 +208,22 @@
// to delete the object and thus refresh visualisations
pObj->GetViewContact().flushViewObjectContacts();
bObjectsRemoved = true;
if(nullptr == pSdrModelFromRemovedSdrObject)
{
pSdrModelFromRemovedSdrObject = &pObj->getSdrModelFromSdrObject();
}
// sent remove hint (after removal, see RemoveObject())
if(pModel)
{
SdrHint aHint(SdrHintKind::ObjectRemoved, *pObj, pPage);
pModel->Broadcast(aHint);
}
SdrHint aHint(SdrHintKind::ObjectRemoved, *pObj, pPage);
pObj->getSdrModelFromSdrObject().Broadcast(aHint);
// delete the object itself
SdrObject::Free( pObj );
}
if(pModel && bObjectsRemoved)
if(nullptr != pSdrModelFromRemovedSdrObject)
{
pModel->SetChanged();
pSdrModelFromRemovedSdrObject->SetChanged();
}
}
@@ -257,23 +244,6 @@
}
}
SdrModel* SdrObjList::GetModel() const
{
return pModel;
}
void SdrObjList::SetModel(SdrModel* pNewModel)
{
if (pModel!=pNewModel) {
pModel=pNewModel;
const size_t nCount = GetObjCount();
for (size_t i=0; i<nCount; ++i) {
SdrObject* pObj=GetObj(i);
pObj->SetModel(pModel);
}
}
}
void SdrObjList::RecalcObjOrdNums()
{
const size_t nCount = GetObjCount();
@@ -369,18 +339,15 @@
pOwnerObj->ActionChanged();
}
if(pModel)
// TODO: We need a different broadcast here!
// Repaint from object number ... (heads-up: GroupObj)
if(pObj->GetPage())
{
// TODO: We need a different broadcast here!
// Repaint from object number ... (heads-up: GroupObj)
if(pObj->GetPage())
{
SdrHint aHint(SdrHintKind::ObjectInserted, *pObj);
pModel->Broadcast(aHint);
}
pModel->SetChanged();
SdrHint aHint(SdrHintKind::ObjectInserted, *pObj);
pObj->getSdrModelFromSdrObject().Broadcast(aHint);
}
pObj->getSdrModelFromSdrObject().SetChanged();
}
}
@@ -432,16 +399,17 @@
{
// flushViewObjectContacts() clears the VOC's and those invalidate
pObj->GetViewContact().flushViewObjectContacts();
DBG_ASSERT(pObj->IsInserted(),"The object does not have the status Inserted.");
if (pModel!=nullptr) {
// TODO: We need a different broadcast here.
if (pObj->GetPage()!=nullptr) {
SdrHint aHint(SdrHintKind::ObjectRemoved, *pObj);
pModel->Broadcast(aHint);
}
pModel->SetChanged();
// TODO: We need a different broadcast here.
if (pObj->GetPage()!=nullptr)
{
SdrHint aHint(SdrHintKind::ObjectRemoved, *pObj);
pObj->getSdrModelFromSdrObject().Broadcast(aHint);
}
pObj->getSdrModelFromSdrObject().SetChanged();
pObj->SetInserted(false); // calls, among other things, the UserCall
pObj->SetObjList(nullptr);
pObj->SetPage(nullptr);
@@ -514,13 +482,14 @@
DBG_ASSERT(pObj!=nullptr,"SdrObjList::ReplaceObject: Could not find object to remove.");
if (pObj!=nullptr) {
DBG_ASSERT(pObj->IsInserted(),"SdrObjList::ReplaceObject: the object does not have status Inserted.");
if (pModel!=nullptr) {
// TODO: We need a different broadcast here.
if (pObj->GetPage()!=nullptr) {
SdrHint aHint(SdrHintKind::ObjectRemoved, *pObj);
pModel->Broadcast(aHint);
}
// TODO: We need a different broadcast here.
if (pObj->GetPage()!=nullptr)
{
SdrHint aHint(SdrHintKind::ObjectRemoved, *pObj);
pObj->getSdrModelFromSdrObject().Broadcast(aHint);
}
pObj->SetInserted(false);
pObj->SetObjList(nullptr);
pObj->SetPage(nullptr);
@@ -538,14 +507,15 @@
impChildInserted(*pNewObj);
pNewObj->SetInserted(true);
if (pModel!=nullptr) {
// TODO: We need a different broadcast here.
if (pNewObj->GetPage()!=nullptr) {
SdrHint aHint(SdrHintKind::ObjectInserted, *pNewObj);
pModel->Broadcast(aHint);
}
pModel->SetChanged();
// TODO: We need a different broadcast here.
if (pNewObj->GetPage()!=nullptr) {
SdrHint aHint(SdrHintKind::ObjectInserted, *pNewObj);
pNewObj->getSdrModelFromSdrObject().Broadcast(aHint);
}
pNewObj->getSdrModelFromSdrObject().SetChanged();
SetRectsDirty();
}
return pObj;
@@ -574,13 +544,11 @@
pObj->SetOrdNum(nNewObjNum);
bObjOrdNumsDirty=true;
if (pModel!=nullptr)
{
// TODO: We need a different broadcast here.
if (pObj->GetPage()!=nullptr)
pModel->Broadcast(SdrHint(SdrHintKind::ObjectChange, *pObj));
pModel->SetChanged();
}
// TODO: We need a different broadcast here.
if (pObj->GetPage()!=nullptr)
pObj->getSdrModelFromSdrObject().Broadcast(SdrHint(SdrHintKind::ObjectChange, *pObj));
pObj->getSdrModelFromSdrObject().SetChanged();
}
return pObj;
}
@@ -781,8 +749,7 @@
mbIsNavigationOrderDirty = true;
// The navigation order is written out to file so mark the model as modified.
if (pModel != nullptr)
pModel->SetChanged();
rObject.getSdrModelFromSdrObject().SetChanged();
}
}
@@ -1048,20 +1015,18 @@
void ImpPageChange(SdrPage& rSdrPage)
{
rSdrPage.ActionChanged();
if(rSdrPage.GetModel())
{
rSdrPage.GetModel()->SetChanged();
SdrHint aHint(SdrHintKind::PageOrderChange, &rSdrPage);
rSdrPage.GetModel()->Broadcast(aHint);
}
rSdrPage.getSdrModelFromSdrPage().SetChanged();
SdrHint aHint(SdrHintKind::PageOrderChange, &rSdrPage);
rSdrPage.getSdrModelFromSdrPage().Broadcast(aHint);
}
SdrPageProperties::SdrPageProperties(SdrPage& rSdrPage)
: SfxListener(),
mpSdrPage(&rSdrPage),
mpStyleSheet(nullptr),
maProperties(mpSdrPage->GetModel()->GetItemPool(), svl::Items<XATTR_FILL_FIRST, XATTR_FILL_LAST>{})
maProperties(
mpSdrPage->getSdrModelFromSdrPage().GetItemPool(),
svl::Items<XATTR_FILL_FIRST, XATTR_FILL_LAST>{})
{
if(!rSdrPage.IsMasterPage())
{
@@ -1136,18 +1101,23 @@
}
SdrPage::SdrPage(SdrModel& rNewModel, bool bMasterPage)
: SdrObjList(&rNewModel, this),
SdrPage::SdrPage(SdrModel& rModel, bool bMasterPage)
: tools::WeakBase(),
SdrObjList(this),
maPageUsers(),
mpViewContact(nullptr),
mrSdrModelFromSdrPage(rModel),
mnWidth(10),
mnHeight(10),
mnBorderLeft(0),
mnBorderUpper(0),
mnBorderRight(0),
mnBorderLower(0),
mpLayerAdmin(new SdrLayerAdmin(&rNewModel.GetLayerAdmin())),
mpLayerAdmin(new SdrLayerAdmin(&rModel.GetLayerAdmin())),
mpSdrPageProperties(nullptr),
mxUnoPage(),
mpMasterPageDescriptor(nullptr),
aPrefVisiLayers(),
nPageNum(0),
mbMaster(bMasterPage),
mbInserted(false),
@@ -1160,27 +1130,6 @@
mpSdrPageProperties.reset(new SdrPageProperties(*this));
}
SdrPage::SdrPage(const SdrPage& rSrcPage)
: SdrObjList(rSrcPage.pModel, this),
mpViewContact(nullptr),
mnWidth(rSrcPage.mnWidth),
mnHeight(rSrcPage.mnHeight),
mnBorderLeft(rSrcPage.mnBorderLeft),
mnBorderUpper(rSrcPage.mnBorderUpper),
mnBorderRight(rSrcPage.mnBorderRight),
mnBorderLower(rSrcPage.mnBorderLower),
mpLayerAdmin(new SdrLayerAdmin(rSrcPage.pModel->GetLayerAdmin())),
mpSdrPageProperties(nullptr),
mpMasterPageDescriptor(nullptr),
nPageNum(rSrcPage.nPageNum),
mbMaster(rSrcPage.mbMaster),
mbInserted(false),
mbObjectsNotPersistent(rSrcPage.mbObjectsNotPersistent),
mbPageBorderOnlyLeftRight(rSrcPage.mbPageBorderOnlyLeftRight)
{
aPrefVisiLayers.SetAll();
}
SdrPage::~SdrPage()
{
if( mxUnoPage.is() ) try
@@ -1218,18 +1167,13 @@
mpSdrPageProperties.reset();
}
void SdrPage::lateInit(const SdrPage& rSrcPage, SdrModel* const pNewModel)
void SdrPage::lateInit(const SdrPage& rSrcPage)
{
assert(!mpViewContact);
assert(!mpSdrPageProperties);
// SdrPageProperties get set by SdrPage::SdrPage already, so do not assert anymore
// assert(!mpSdrPageProperties);
assert(!mxUnoPage.is());
if (pNewModel && (pNewModel != pModel))
{
pModel = pNewModel;
impl_setModelForLayerAdmin(pNewModel);
}
// copy all the local parameters to make this instance
// a valid copy of source page before copying and inserting
// the contained objects
@@ -1268,24 +1212,18 @@
}
// Now copy the contained objects
SdrObjList::lateInit(rSrcPage);
SdrObjList::lateInitSdrObjList(rSrcPage, &getSdrModelFromSdrPage());
// be careful and correct eListKind, a member of SdrObjList which
// will be changed by the SdrObjList::lateInit before...
eListKind = (mbMaster) ? SdrObjListKind::MasterPage : SdrObjListKind::DrawPage;
}
SdrPage* SdrPage::Clone() const
{
return Clone(nullptr);
}
SdrPage* SdrPage::Clone(SdrModel* pNewModel) const
{
if (pNewModel==nullptr) pNewModel=pModel;
SdrPage* pPage2=new SdrPage(*pNewModel);
pPage2->lateInit(*this);
return pPage2;
SdrPage* pClonedPage(new SdrPage(nullptr == pNewModel ? getSdrModelFromSdrPage() : *pNewModel));
pClonedPage->lateInit(*this);
return pClonedPage;
}
void SdrPage::SetSize(const Size& aSiz)
@@ -1435,59 +1373,6 @@
return mnBorderLower;
}
void SdrPage::impl_setModelForLayerAdmin(SdrModel* const pNewModel)
{
if (pNewModel!=nullptr) {
mpLayerAdmin->SetParent(&pNewModel->GetLayerAdmin());
} else {
mpLayerAdmin->SetParent(nullptr);
}
mpLayerAdmin->SetModel(pNewModel);
}
void SdrPage::SetModel(SdrModel* pNewModel)
{
SdrModel* pOldModel=pModel;
SdrObjList::SetModel(pNewModel);
if (pNewModel!=pOldModel)
{
impl_setModelForLayerAdmin( pNewModel );
// create new SdrPageProperties with new model (due to SfxItemSet there)
// and copy ItemSet and StyleSheet
std::unique_ptr<SdrPageProperties> pNew(new SdrPageProperties(*this));
if(!IsMasterPage())
{
const SfxItemSet& rOldSet = getSdrPageProperties().GetItemSet();
SfxItemSet* pNewSet = rOldSet.Clone(false, &pNewModel->GetItemPool());
//ensure checkForUniqueItem is called so new pages which have e.g.
//XFillBitmapItem set, do not conflict with an existing XFillBitmapItem
//with the same name but different properties
SdrModel::MigrateItemSet(&rOldSet, pNewSet, pNewModel);
pNew->PutItemSet(*pNewSet);
delete pNewSet;
}
pNew->SetStyleSheet(getSdrPageProperties().GetStyleSheet());
mpSdrPageProperties = std::move(pNew);
}
// update listeners at possible API wrapper object
if( pOldModel != pNewModel )
{
if( mxUnoPage.is() )
{
SvxDrawPage* pPage2 = SvxDrawPage::getImplementation( mxUnoPage );
if( pPage2 )
pPage2->ChangeModel( pNewModel );
}
}
}
// #i68775# React on PageNum changes (from Model in most cases)
void SdrPage::SetPageNum(sal_uInt16 nNew)
{
@@ -1507,11 +1392,11 @@
return 0;
if (mbMaster) {
if (pModel && pModel->IsMPgNumsDirty())
pModel->RecalcPageNums(true);
if (getSdrModelFromSdrPage().IsMPgNumsDirty())
getSdrModelFromSdrPage().RecalcPageNums(true);
} else {
if (pModel && pModel->IsPagNumsDirty())
pModel->RecalcPageNums(false);
if (getSdrModelFromSdrPage().IsPagNumsDirty())
getSdrModelFromSdrPage().RecalcPageNums(false);
}
return nPageNum;
}
@@ -1521,11 +1406,7 @@
// For test purposes, use the new ViewContact for change
// notification now.
ActionChanged();
if( pModel )
{
pModel->SetChanged();
}
getSdrModelFromSdrPage().SetChanged();
}
diff --git a/svx/source/svdraw/svdpagv.cxx b/svx/source/svdraw/svdpagv.cxx
index da88ec5..ff63498 100644
--- a/svx/source/svdraw/svdpagv.cxx
+++ b/svx/source/svdraw/svdpagv.cxx
@@ -898,15 +898,25 @@
void SdrPageView::CheckAktGroup()
{
SdrObject* pGrp=GetAktGroup();
while (pGrp!=nullptr &&
(!pGrp->IsInserted() || pGrp->GetObjList()==nullptr ||
pGrp->GetPage()==nullptr || pGrp->GetModel()==nullptr)) { // anything outside of the borders?
pGrp=pGrp->GetUpGroup();
SdrObject* pGrp(GetAktGroup());
while(nullptr != pGrp &&
(!pGrp->IsInserted() || nullptr == pGrp->GetObjList() || nullptr == pGrp->GetPage()))
{
// anything outside of the borders?
pGrp = pGrp->GetUpGroup();
}
if (pGrp!=GetAktGroup()) {
if (pGrp!=nullptr) EnterGroup(pGrp);
else LeaveAllGroup();
if(pGrp != GetAktGroup())
{
if(nullptr != pGrp)
{
EnterGroup(pGrp);
}
else
{
LeaveAllGroup();
}
}
}
diff --git a/svx/source/svdraw/svdpntv.cxx b/svx/source/svdraw/svdpntv.cxx
index 48c971d..ba0e252 100644
--- a/svx/source/svdraw/svdpntv.cxx
+++ b/svx/source/svdraw/svdpntv.cxx
@@ -181,9 +181,12 @@
maGridColor = COL_BLACK;
}
SdrPaintView::SdrPaintView(SdrModel* pModel, OutputDevice* pOut)
: mpPageView(nullptr),
maDefaultAttr(pModel->GetItemPool()),
SdrPaintView::SdrPaintView(
SdrModel& rSdrModel,
OutputDevice* pOut)
: mrSdrModelFromSdrView(rSdrModel),
mpPageView(nullptr),
maDefaultAttr(rSdrModel.GetItemPool()),
mbBufferedOutputAllowed(false),
mbBufferedOverlayAllowed(false),
mbPagePaintingAllowed(true),
@@ -192,7 +195,7 @@
mbHideDraw(false),
mbHideFormControl(false)
{
mpModel=pModel;
mpModel=&rSdrModel;
ImpClearVars();
if(pOut)
diff --git a/svx/source/svdraw/svdpoev.cxx b/svx/source/svdraw/svdpoev.cxx
index 509eb11..56e3286 100644
--- a/svx/source/svdraw/svdpoev.cxx
+++ b/svx/source/svdraw/svdpoev.cxx
@@ -44,8 +44,10 @@
bSetMarkedSegmentsKindPossible=false;
}
SdrPolyEditView::SdrPolyEditView(SdrModel* pModel1, OutputDevice* pOut):
SdrEditView(pModel1,pOut)
SdrPolyEditView::SdrPolyEditView(
SdrModel& rSdrModel,
OutputDevice* pOut)
: SdrEditView(rSdrModel, pOut)
{
ImpResetPolyPossibilityFlags();
}
diff --git a/svx/source/svdraw/svdsnpv.cxx b/svx/source/svdraw/svdsnpv.cxx
index 94f1f5a..10aacc3 100644
--- a/svx/source/svdraw/svdsnpv.cxx
+++ b/svx/source/svdraw/svdsnpv.cxx
@@ -165,30 +165,31 @@
}
}
SdrSnapView::SdrSnapView(SdrModel* pModel1, OutputDevice* pOut)
: SdrPaintView(pModel1,pOut)
, mpPageOriginOverlay(nullptr)
, mpHelpLineOverlay(nullptr)
, nMagnSizPix(4)
, nSnapAngle(1500)
, nEliminatePolyPointLimitAngle(0)
, eCrookMode(SdrCrookMode::Rotate)
, bSnapEnab(true)
, bGridSnap(true)
, bBordSnap(true)
, bHlplSnap(true)
, bOFrmSnap(true)
, bOPntSnap(false)
, bOConSnap(true)
, bMoveSnapOnlyTopLeft(false)
, bOrtho(false)
, bBigOrtho(true)
, bAngleSnapEnab(false)
, bMoveOnlyDragging(false)
, bSlantButShear(false)
, bCrookNoContortion(false)
, bEliminatePolyPoints(false)
SdrSnapView::SdrSnapView(
SdrModel& rSdrModel,
OutputDevice* pOut)
: SdrPaintView(rSdrModel, pOut)
,mpPageOriginOverlay(nullptr)
,mpHelpLineOverlay(nullptr)
,nMagnSizPix(4)
,nSnapAngle(1500)
,nEliminatePolyPointLimitAngle(0)
,eCrookMode(SdrCrookMode::Rotate)
,bSnapEnab(true)
,bGridSnap(true)
,bBordSnap(true)
,bHlplSnap(true)
,bOFrmSnap(true)
,bOPntSnap(false)
,bOConSnap(true)
,bMoveSnapOnlyTopLeft(false)
,bOrtho(false)
,bBigOrtho(true)
,bAngleSnapEnab(false)
,bMoveOnlyDragging(false)
,bSlantButShear(false)
,bCrookNoContortion(false)
,bEliminatePolyPoints(false)
{
}
diff --git a/svx/source/svdraw/svdtext.cxx b/svx/source/svdraw/svdtext.cxx
index 159f863..5495788 100644
--- a/svx/source/svdraw/svdtext.cxx
+++ b/svx/source/svdraw/svdtext.cxx
@@ -31,7 +31,6 @@
SdrText::SdrText( SdrTextObj& rObject )
: mpOutlinerParaObject( nullptr )
, mrObject( rObject )
, mpModel( rObject.GetModel() )
, mbPortionInfoChecked( false )
{
OSL_ENSURE(&mrObject, "SdrText created without SdrTextObj (!)");
@@ -48,11 +47,12 @@
{
// #i102062# no action when the Outliner is the HitTestOutliner,
// this will remove WrongList info at the OPO
if(mpModel && &rOutliner == &mpModel->GetHitTestOutliner())
if(&rOutliner == &mrObject.getSdrModelFromSdrObject().GetHitTestOutliner())
return;
// TODO: optimization: we could create a BigTextObject
mbPortionInfoChecked=true;
if(mpOutlinerParaObject!=nullptr && rOutliner.ShouldCreateBigTextObject())
{
// #i102062# MemoryLeak closed
@@ -76,16 +76,15 @@
{
if( mpOutlinerParaObject.get() != pTextObject )
{
if( mpModel )
// Update HitTestOutliner
const SdrTextObj* pTestObj(mrObject.getSdrModelFromSdrObject().GetHitTestOutliner().GetTextObj());
if(pTestObj && pTestObj->GetOutlinerParaObject() == mpOutlinerParaObject.get())
{
// Update HitTestOutliner
const SdrTextObj* pTestObj = mpModel->GetHitTestOutliner().GetTextObj();
if( pTestObj && pTestObj->GetOutlinerParaObject() == mpOutlinerParaObject.get() )
mpModel->GetHitTestOutliner().SetTextObj( nullptr );
mrObject.getSdrModelFromSdrObject().GetHitTestOutliner().SetTextObj(nullptr);
}
mpOutlinerParaObject.reset(pTextObject);
mbPortionInfoChecked = false;
}
}
@@ -98,82 +97,33 @@
/** returns the current OutlinerParaObject and removes it from this instance */
OutlinerParaObject* SdrText::RemoveOutlinerParaObject()
{
if( mpModel )
// Update HitTestOutliner
const SdrTextObj* pTestObj(mrObject.getSdrModelFromSdrObject().GetHitTestOutliner().GetTextObj());
if(pTestObj && pTestObj->GetOutlinerParaObject() == mpOutlinerParaObject.get())
{
// Update HitTestOutliner
const SdrTextObj* pTestObj = mpModel->GetHitTestOutliner().GetTextObj();
if( pTestObj && pTestObj->GetOutlinerParaObject() == mpOutlinerParaObject.get() )
mpModel->GetHitTestOutliner().SetTextObj( nullptr );
mrObject.getSdrModelFromSdrObject().GetHitTestOutliner().SetTextObj(nullptr);
}
OutlinerParaObject* pOPO = mpOutlinerParaObject.release();
mbPortionInfoChecked = false;
return pOPO;
}
void SdrText::SetModel( SdrModel* pNewModel )
{
if( pNewModel == mpModel )
return;
SdrModel* pOldModel = mpModel;
mpModel = pNewModel;
if( !mpOutlinerParaObject || pOldModel==nullptr || pNewModel==nullptr)
return;
bool bHgtSet = GetObjectItemSet().GetItemState(EE_CHAR_FONTHEIGHT) == SfxItemState::SET;
MapUnit aOldUnit(pOldModel->GetScaleUnit());
MapUnit aNewUnit(pNewModel->GetScaleUnit());
bool bScaleUnitChanged=aNewUnit!=aOldUnit;
// Now move the OutlinerParaObject into a new Pool.
// TODO: We should compare the DefTab and RefDevice of both Models to
// see whether we need to use AutoGrow!
sal_Int32 nOldFontHgt=pOldModel->GetDefaultFontHeight();
sal_Int32 nNewFontHgt=pNewModel->GetDefaultFontHeight();
bool bDefHgtChanged=nNewFontHgt!=nOldFontHgt;
bool bSetHgtItem=bDefHgtChanged && !bHgtSet;
if (bSetHgtItem)
{
// fix the value of HeightItem, so
// 1. it remains and
// 2. DoStretchChars gets the right value
SetObjectItem(SvxFontHeightItem(nOldFontHgt, 100, EE_CHAR_FONTHEIGHT));
}
// now use the Outliner, etc. so the above SetAttr can work at all
SdrOutliner& rOutliner = mrObject.ImpGetDrawOutliner();
rOutliner.SetText(*mpOutlinerParaObject);
mpOutlinerParaObject.reset();
if (bScaleUnitChanged)
{
Fraction aMetricFactor=GetMapFactor(aOldUnit,aNewUnit).X();
if (bSetHgtItem)
{
// Now correct the frame attribute
nOldFontHgt=BigMulDiv(nOldFontHgt,aMetricFactor.GetNumerator(),aMetricFactor.GetDenominator());
SetObjectItem(SvxFontHeightItem(nOldFontHgt, 100, EE_CHAR_FONTHEIGHT));
}
}
SetOutlinerParaObject(rOutliner.CreateParaObject());
mpOutlinerParaObject->ClearPortionInfo();
mbPortionInfoChecked=false;
rOutliner.Clear();
}
void SdrText::ForceOutlinerParaObject( OutlinerMode nOutlMode )
{
if( mpModel && !mpOutlinerParaObject )
if(!mpOutlinerParaObject)
{
std::unique_ptr<Outliner> pOutliner(SdrMakeOutliner(nOutlMode, *mpModel));
if( pOutliner )
{
Outliner& aDrawOutliner = mpModel->GetDrawOutliner();
pOutliner->SetCalcFieldValueHdl( aDrawOutliner.GetCalcFieldValueHdl() );
std::unique_ptr<Outliner> pOutliner(
SdrMakeOutliner(
nOutlMode,
mrObject.getSdrModelFromSdrObject()));
if(pOutliner)
{
Outliner& aDrawOutliner(mrObject.getSdrModelFromSdrObject().GetDrawOutliner());
pOutliner->SetCalcFieldValueHdl( aDrawOutliner.GetCalcFieldValueHdl() );
pOutliner->SetStyleSheet( 0, GetStyleSheet());
OutlinerParaObject* pOutlinerParaObject = pOutliner->CreateParaObject();
SetOutlinerParaObject( pOutlinerParaObject );
diff --git a/svx/source/svdraw/svdundo.cxx b/svx/source/svdraw/svdundo.cxx
index 1c6ec23..22720cf 100644
--- a/svx/source/svdraw/svdundo.cxx
+++ b/svx/source/svdraw/svdundo.cxx
@@ -209,8 +209,8 @@
}
SdrUndoObj::SdrUndoObj(SdrObject& rNewObj)
: SdrUndoAction(*rNewObj.GetModel())
, pObj(&rNewObj)
: SdrUndoAction(rNewObj.getSdrModelFromSdrObject())
,pObj(&rNewObj)
{
}
@@ -237,10 +237,10 @@
// common call method for possible change of the page when UNDO/REDO is triggered
void SdrUndoObj::ImpShowPageOfThisObject()
{
if(pObj && pObj->IsInserted() && pObj->GetPage() && pObj->GetModel())
if(pObj && pObj->IsInserted() && pObj->GetPage())
{
SdrHint aHint(SdrHintKind::SwitchToPage, *pObj, pObj->GetPage());
pObj->GetModel()->Broadcast(aHint);
pObj->getSdrModelFromSdrObject().Broadcast(aHint);
}
}
@@ -275,7 +275,7 @@
if(bIsGroup)
{
// it's a group object!
pUndoGroup.reset( new SdrUndoGroup(*pObj->GetModel()) );
pUndoGroup.reset(new SdrUndoGroup(pObj->getSdrModelFromSdrObject()));
const size_t nObjCount(pOL->GetObjCount());
for(size_t nObjNum = 0; nObjNum < nObjCount; ++nObjNum)
@@ -343,9 +343,9 @@
mxRedoStyleSheet = pObj->GetStyleSheet();
SfxStyleSheet* pSheet = dynamic_cast< SfxStyleSheet* >(mxUndoStyleSheet.get());
if(pSheet && pObj->GetModel() && pObj->GetModel()->GetStyleSheetPool())
if(pSheet && pObj->getSdrModelFromSdrObject().GetStyleSheetPool())
{
ensureStyleSheetInStyleSheetPool(*pObj->GetModel()->GetStyleSheetPool(), *pSheet);
ensureStyleSheetInStyleSheetPool(*pObj->getSdrModelFromSdrObject().GetStyleSheetPool(), *pSheet);
pObj->SetStyleSheet(pSheet, true);
}
else
@@ -426,9 +426,9 @@
mxUndoStyleSheet = pObj->GetStyleSheet();
SfxStyleSheet* pSheet = dynamic_cast< SfxStyleSheet* >(mxRedoStyleSheet.get());
if(pSheet && pObj->GetModel() && pObj->GetModel()->GetStyleSheetPool())
if(pSheet && pObj->getSdrModelFromSdrObject().GetStyleSheetPool())
{
ensureStyleSheetInStyleSheetPool(*pObj->GetModel()->GetStyleSheetPool(), *pSheet);
ensureStyleSheetInStyleSheetPool(*pObj->getSdrModelFromSdrObject().GetStyleSheetPool(), *pSheet);
pObj->SetStyleSheet(pSheet, true);
}
else
@@ -581,7 +581,7 @@
// this is a group object!
// If this were 3D scene, we'd only add an Undo for the scene itself
// (which we do elsewhere).
pUndoGroup.reset(new SdrUndoGroup(*pObj->GetModel()));
pUndoGroup.reset(new SdrUndoGroup(pObj->getSdrModelFromSdrObject()));
const size_t nObjCount = pOL->GetObjCount();
for (size_t nObjNum = 0; nObjNum<nObjCount; ++nObjNum) {
pUndoGroup->AddAction(new SdrUndoGeoObj(*pOL->GetObj(nObjNum)));
@@ -1335,8 +1335,8 @@
SdrUndoPage::SdrUndoPage(SdrPage& rNewPg)
: SdrUndoAction(*rNewPg.GetModel())
, mrPage(rNewPg)
: SdrUndoAction(rNewPg.getSdrModelFromSdrPage())
,mrPage(rNewPg)
{
}
@@ -1657,7 +1657,7 @@
{
if(mbOldHadMasterPage)
{
mrPage.TRG_SetMasterPage(*mrPage.GetModel()->GetMasterPage(maOldMasterPageNumber));
mrPage.TRG_SetMasterPage(*mrPage.getSdrModelFromSdrPage().GetMasterPage(maOldMasterPageNumber));
mrPage.TRG_SetMasterPageVisibleLayers(maOldSet);
}
}
@@ -1695,7 +1695,7 @@
if(mbOldHadMasterPage)
{
mrPage.TRG_ClearMasterPage();
mrPage.TRG_SetMasterPage(*mrPage.GetModel()->GetMasterPage(maOldMasterPageNumber));
mrPage.TRG_SetMasterPage(*mrPage.getSdrModelFromSdrPage().GetMasterPage(maOldMasterPageNumber));
mrPage.TRG_SetMasterPageVisibleLayers(maOldSet);
}
}
@@ -1706,7 +1706,7 @@
if(mbNewHadMasterPage)
{
mrPage.TRG_ClearMasterPage();
mrPage.TRG_SetMasterPage(*mrPage.GetModel()->GetMasterPage(maNewMasterPageNumber));
mrPage.TRG_SetMasterPage(*mrPage.getSdrModelFromSdrPage().GetMasterPage(maNewMasterPageNumber));
mrPage.TRG_SetMasterPageVisibleLayers(maNewSet);
}
}
diff --git a/svx/source/svdraw/svdview.cxx b/svx/source/svdraw/svdview.cxx
index db460ea..d9eb524 100644
--- a/svx/source/svdraw/svdview.cxx
+++ b/svx/source/svdraw/svdview.cxx
@@ -146,15 +146,15 @@
// OverlayManager and deletes them.
}
SdrView::SdrView(SdrModel* pModel1, OutputDevice* pOut)
: SdrCreateView(pModel1,pOut),
SdrView::SdrView(
SdrModel& rSdrModel,
OutputDevice* pOut)
: SdrCreateView(rSdrModel, pOut),
bNoExtendedMouseDispatcher(false),
bNoExtendedKeyDispatcher(false),
mbMasterPagePaintCaching(false)
{
maAccessibilityOptions.AddListener(this);
onAccessibilityOptionsChanged();
}
diff --git a/svx/source/svdraw/svdviter.cxx b/svx/source/svdraw/svdviter.cxx
index 2dbd8b5..044526e 100644
--- a/svx/source/svdraw/svdviter.cxx
+++ b/svx/source/svdraw/svdviter.cxx
@@ -38,7 +38,7 @@
SdrViewIter::SdrViewIter(const SdrPage* pPage)
{
mpPage = pPage;
mpModel = pPage ? pPage->GetModel() : nullptr;
mpModel = pPage ? &pPage->getSdrModelFromSdrPage() : nullptr;
mpObject = nullptr;
mbNoMasterPage = false;
ImpInitVars();
@@ -48,7 +48,7 @@
SdrViewIter::SdrViewIter(const SdrObject* pObject)
{
mpObject = pObject;
mpModel = pObject ? pObject->GetModel() : nullptr;
mpModel = pObject ? &pObject->getSdrModelFromSdrObject() : nullptr;
mpPage = pObject ? pObject->GetPage() : nullptr;
mbNoMasterPage = false;
diff --git a/svx/source/svdraw/svdxcgv.cxx b/svx/source/svdraw/svdxcgv.cxx
index 1011c8a..58fc733 100644
--- a/svx/source/svdraw/svdxcgv.cxx
+++ b/svx/source/svdraw/svdxcgv.cxx
@@ -57,8 +57,10 @@
using namespace com::sun::star;
SdrExchangeView::SdrExchangeView(SdrModel* pModel1, OutputDevice* pOut):
SdrObjEditView(pModel1,pOut)
SdrExchangeView::SdrExchangeView(
SdrModel& rSdrModel,
OutputDevice* pOut)
: SdrObjEditView(rSdrModel, pOut)
{
}
@@ -143,8 +145,11 @@
if (pPage!=nullptr) {
aTextRect.SetSize(pPage->GetSize());
}
SdrRectObj* pObj=new SdrRectObj(OBJ_TEXT,aTextRect);
pObj->SetModel(mpModel);
SdrRectObj* pObj = new SdrRectObj(
getSdrModelFromSdrView(),
OBJ_TEXT,
aTextRect);
pObj->SetLayer(nLayer);
pObj->NbcSetText(rStr); // SetText before SetAttr, else SetAttr doesn't work!
if (mpDefaultStyleSheet!=nullptr) pObj->NbcSetStyleSheet(mpDefaultStyleSheet, false);
@@ -180,8 +185,11 @@
if (pPage!=nullptr) {
aTextRect.SetSize(pPage->GetSize());
}
SdrRectObj* pObj=new SdrRectObj(OBJ_TEXT,aTextRect);
pObj->SetModel(mpModel);
SdrRectObj* pObj = new SdrRectObj(
getSdrModelFromSdrView(),
OBJ_TEXT,
aTextRect);
pObj->SetLayer(nLayer);
if (mpDefaultStyleSheet!=nullptr) pObj->NbcSetStyleSheet(mpDefaultStyleSheet, false);
@@ -201,9 +209,9 @@
ImpPasteObject(pObj,*pLst,aPos,aSiz,MapMode(eMap,Point(0,0),aMap,aMap),nOptions);
// b4967543
if(pObj->GetModel() && pObj->GetOutlinerParaObject())
if(pObj->GetOutlinerParaObject())
{
SdrOutliner& rOutliner = pObj->GetModel()->GetHitTestOutliner();
SdrOutliner& rOutliner = pObj->getSdrModelFromSdrObject().GetHitTestOutliner();
rOutliner.SetText(*pObj->GetOutlinerParaObject());
if(1 == rOutliner.GetParagraphCount())
@@ -212,7 +220,7 @@
if(pCandidate)
{
if(pObj->GetModel()->GetStyleSheetPool() == &pCandidate->GetPool())
if(pObj->getSdrModelFromSdrObject().GetStyleSheetPool() == &pCandidate->GetPool())
{
pObj->NbcSetStyleSheet(pCandidate, true);
}
@@ -305,15 +313,13 @@
{
if(bResize)
{
pNewObj->GetModel()->SetPasteResize(true);
pNewObj->getSdrModelFromSdrObject().SetPasteResize(true);
pNewObj->NbcResize(aPt0,aXResize,aYResize);
pNewObj->GetModel()->SetPasteResize(false);
pNewObj->getSdrModelFromSdrObject().SetPasteResize(false);
}
// #i39861#
pNewObj->SetModel(pDstLst->GetModel());
pNewObj->SetPage(pDstLst->GetPage());
pNewObj->NbcMove(aSiz);
const SdrPage* pPg = pDstLst->GetPage();
@@ -345,7 +351,7 @@
pDstLst->InsertObject(pNewObj, SAL_MAX_SIZE);
if( bUndo )
AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoNewObject(*pNewObj));
AddUndo(getSdrModelFromSdrView().GetSdrUndoFactory().CreateUndoNewObject(*pNewObj));
if (bMark) {
// Don't already set Markhandles!
@@ -414,7 +420,7 @@
rLst.InsertObject(pObj, SAL_MAX_SIZE);
if( IsUndoEnabled() )
AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoNewObject(*pObj));
AddUndo(getSdrModelFromSdrView().GetSdrUndoFactory().CreateUndoNewObject(*pObj));
SdrPageView* pMarkPV=nullptr;
SdrPageView* pPV = GetSdrPageView();
@@ -579,7 +585,7 @@
if( AreObjectsMarked() )
{
if( ( 1 == GetMarkedObjectCount() ) && GetSdrMarkByIndex( 0 ) )
aRet = SdrExchangeView::GetObjGraphic( mpModel, GetMarkedObjectByIndex( 0 ) );
aRet = SdrExchangeView::GetObjGraphic(*GetMarkedObjectByIndex(0));
else
aRet = GetMarkedObjMetaFile();
}
@@ -588,68 +594,68 @@
}
Graphic SdrExchangeView::GetObjGraphic( const SdrModel* pModel, const SdrObject* pObj )
Graphic SdrExchangeView::GetObjGraphic(const SdrObject& rSdrObject)
{
Graphic aRet;
if( pModel && pObj )
// try to get a graphic from the object first
const SdrGrafObj* pSdrGrafObj(dynamic_cast< const SdrGrafObj* >(&rSdrObject));
const SdrOle2Obj* pSdrOle2Obj(dynamic_cast< const SdrOle2Obj* >(&rSdrObject));
if(pSdrGrafObj)
{
// try to get a graphic from the object first
const SdrGrafObj* pSdrGrafObj = dynamic_cast< const SdrGrafObj* >(pObj);
const SdrOle2Obj* pSdrOle2Obj = dynamic_cast< const SdrOle2Obj* >(pObj);
if(pSdrGrafObj)
if(pSdrGrafObj->isEmbeddedVectorGraphicData())
{
if(pSdrGrafObj->isEmbeddedVectorGraphicData())
{
// get Metafile for Svg content
aRet = pSdrGrafObj->getMetafileFromEmbeddedVectorGraphicData();
}
else
{
// Make behaviour coherent with metafile
// recording below (which of course also takes
// view-transformed objects)
aRet = pSdrGrafObj->GetTransformedGraphic();
}
// get Metafile for Svg content
aRet = pSdrGrafObj->getMetafileFromEmbeddedVectorGraphicData();
}
else if(pSdrOle2Obj)
else
{
if ( pSdrOle2Obj->GetGraphic() )
aRet = *pSdrOle2Obj->GetGraphic();
// Make behaviour coherent with metafile
// recording below (which of course also takes
// view-transformed objects)
aRet = pSdrGrafObj->GetTransformedGraphic();
}
// if graphic could not be retrieved => go the hard way and create a MetaFile
if( ( GraphicType::NONE == aRet.GetType() ) || ( GraphicType::Default == aRet.GetType() ) )
}
else if(pSdrOle2Obj)
{
if(pSdrOle2Obj->GetGraphic())
{
ScopedVclPtrInstance< VirtualDevice > pOut;
GDIMetaFile aMtf;
const tools::Rectangle aBoundRect( pObj->GetCurrentBoundRect() );
const MapMode aMap( pModel->GetScaleUnit(),
Point(),
pModel->GetScaleFraction(),
pModel->GetScaleFraction() );
pOut->EnableOutput( false );
pOut->SetMapMode( aMap );
aMtf.Record( pOut );
pObj->SingleObjectPainter( *pOut.get() );
aMtf.Stop();
aMtf.WindStart();
// #i99268# replace the original offset from using XOutDev's SetOffset
// NOT (as tried with #i92760#) with another MapMode which gets recorded
// by the Metafile itself (what always leads to problems), but by
// moving the result directly
aMtf.Move(-aBoundRect.Left(), -aBoundRect.Top());
aMtf.SetPrefMapMode( aMap );
aMtf.SetPrefSize( aBoundRect.GetSize() );
if( aMtf.GetActionSize() )
aRet = aMtf;
aRet = *pSdrOle2Obj->GetGraphic();
}
}
}
// if graphic could not be retrieved => go the hard way and create a MetaFile
if((GraphicType::NONE == aRet.GetType()) || (GraphicType::Default == aRet.GetType()))
{
ScopedVclPtrInstance< VirtualDevice > pOut;
GDIMetaFile aMtf;
const tools::Rectangle aBoundRect(rSdrObject.GetCurrentBoundRect());
const MapMode aMap(rSdrObject.getSdrModelFromSdrObject().GetScaleUnit(),
Point(),
rSdrObject.getSdrModelFromSdrObject().GetScaleFraction(),
rSdrObject.getSdrModelFromSdrObject().GetScaleFraction());
pOut->EnableOutput(false);
pOut->SetMapMode(aMap);
aMtf.Record(pOut);
rSdrObject.SingleObjectPainter(*pOut.get());
aMtf.Stop();
aMtf.WindStart();
// #i99268# replace the original offset from using XOutDev's SetOffset
// NOT (as tried with #i92760#) with another MapMode which gets recorded
// by the Metafile itself (what always leads to problems), but by
// moving the result directly
aMtf.Move(-aBoundRect.Left(), -aBoundRect.Top());
aMtf.SetPrefMapMode(aMap);
aMtf.SetPrefSize(aBoundRect.GetSize());
if(aMtf.GetActionSize())
{
aRet = aMtf;
}
}
return aRet;
}
@@ -703,7 +709,6 @@
}
}
SdrModel* SdrExchangeView::GetMarkedObjModel() const
{
// Sorting the MarkList here might be problematic in the future, so
@@ -729,15 +734,16 @@
{
// convert SdrPageObj's to a graphic representation, because
// virtual connection to referenced page gets lost in new model
pNewObj = new SdrGrafObj( GetObjGraphic( mpModel, pObj ), pObj->GetLogicRect() );
pNewObj = new SdrGrafObj(
*pNeuMod,
GetObjGraphic(*pObj),
pObj->GetLogicRect());
pNewObj->SetPage( pNeuPag );
pNewObj->SetModel( pNeuMod );
}
else
{
pNewObj = pObj->Clone();
pNewObj->SetPage( pNeuPag );
pNewObj->SetModel( pNeuMod );
}
pNeuPag->InsertObject(pNewObj, SAL_MAX_SIZE);
@@ -750,8 +756,8 @@
// New mechanism to re-create the connections of cloned connectors
aCloneList.CopyConnections();
}
return pNeuMod;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/table/cell.cxx b/svx/source/table/cell.cxx
index cd19738..0f733d0 100644
--- a/svx/source/table/cell.cxx
+++ b/svx/source/table/cell.cxx
@@ -392,21 +392,31 @@
}
Cell::Cell( SdrTableObj& rTableObj )
: SdrText( rTableObj )
, SvxUnoTextBase( ImplGetSvxUnoOutlinerTextCursorSvxPropertySet() )
, mpPropSet( ImplGetSvxCellPropertySet() )
, mpProperties( new sdr::properties::CellProperties( rTableObj, this ) )
, mnCellContentType( CellContentType_EMPTY )
, mfValue( 0.0 )
, mnError( 0 )
, mbMerged( false )
, mnRowSpan( 1 )
, mnColSpan( 1 )
, mxTable( rTableObj.getTable() )
Cell::Cell(
SdrTableObj& rTableObj)
: SdrText(rTableObj)
,SvxUnoTextBase( ImplGetSvxUnoOutlinerTextCursorSvxPropertySet() )
,mpPropSet( ImplGetSvxCellPropertySet() )
,mpProperties( new sdr::properties::CellProperties( rTableObj, this ) )
,mnCellContentType( CellContentType_EMPTY )
,mfValue( 0.0 )
,mnError( 0 )
,mbMerged( false )
,mnRowSpan( 1 )
,mnColSpan( 1 )
,mxTable( rTableObj.getTable() )
{
if( rTableObj.GetModel() )
SetModel( rTableObj.GetModel() );
// Caution: Old SetModel() indirectly did a very necessary thing here,
// it created a valid SvxTextEditSource which is needed to bind contained
// Text to the UNO API and thus to save/load and more. Added version without
// model change.
// Also done was (not needed, for reference):
// SetStyleSheet( nullptr, true );
// ForceOutlinerParaObject( OutlinerMode::TextObject );
if(nullptr == GetEditSource())
{
SetEditSource(new SvxTextEditSource(&GetObject(), this));
}
}
@@ -440,37 +450,6 @@
SetOutlinerParaObject( nullptr );
}
void Cell::SetModel(SdrModel* pNewModel)
{
SvxTextEditSource* pTextEditSource = dynamic_cast< SvxTextEditSource* >( GetEditSource() );
if( (GetModel() != pNewModel) || ( pNewModel && !pTextEditSource) )
{
if( mpProperties )
{
SfxItemPool* pItemPool = mpProperties->GetObjectItemSet().GetPool();
// test for correct pool in ItemSet; move to new pool if necessary
if( pNewModel && pItemPool && pItemPool != &pNewModel->GetItemPool())
mpProperties->MoveToItemPool(pItemPool, &pNewModel->GetItemPool(), pNewModel);
}
if( pTextEditSource )
{
pTextEditSource->ChangeModel( pNewModel );
}
else
{
SetEditSource( new SvxTextEditSource( &GetObject(), this ) );
}
SetStyleSheet( nullptr, true );
SdrText::SetModel( pNewModel );
ForceOutlinerParaObject( OutlinerMode::TextObject );
}
}
void Cell::merge( sal_Int32 nColumnSpan, sal_Int32 nRowSpan )
{
if ((mnColSpan != nColumnSpan) || (mnRowSpan != nRowSpan) || mbMerged)
@@ -537,12 +516,13 @@
{
mpProperties->SetMergedItemSet( xSourceCell->GetObjectItemSet() );
SetOutlinerParaObject( new OutlinerParaObject(*xSourceCell->GetOutlinerParaObject()) );
SdrTableObj& rTableObj = dynamic_cast< SdrTableObj& >( GetObject() );
SdrTableObj& rSourceTableObj = dynamic_cast< SdrTableObj& >( xSourceCell->GetObject() );
if(rSourceTableObj.GetModel() != rTableObj.GetModel())
if(&rSourceTableObj.getSdrModelFromSdrObject() != &rTableObj.getSdrModelFromSdrObject())
{
// TTTT should not happen - if, then a clone may be needed
// Maybe add a assertion here later
SetStyleSheet( nullptr, true );
}
}
@@ -564,12 +544,13 @@
if( xSourceCell.is() && mpProperties )
{
mpProperties->SetMergedItemSet( xSourceCell->GetObjectItemSet() );
SdrTableObj& rTableObj = dynamic_cast< SdrTableObj& >( GetObject() );
SdrTableObj& rSourceTableObj = dynamic_cast< SdrTableObj& >( xSourceCell->GetObject() );
if(rSourceTableObj.GetModel() != rTableObj.GetModel())
if(&rSourceTableObj.getSdrModelFromSdrObject() != &rTableObj.getSdrModelFromSdrObject())
{
// TTTT should not happen - if, then a clone may be needed
// Maybe add a assertion here later
SetStyleSheet( nullptr, true );
}
@@ -812,10 +793,11 @@
void Cell::AddUndo()
{
SdrObject& rObj = GetObject();
if( rObj.IsInserted() && GetModel() && GetModel()->IsUndoEnabled() )
if( rObj.IsInserted() && rObj.getSdrModelFromSdrObject().IsUndoEnabled() )
{
CellRef xCell( this );
GetModel()->AddUndo( new CellUndo( &rObj, xCell ) );
rObj.getSdrModelFromSdrObject().AddUndo( new CellUndo( &rObj, xCell ) );
// Undo action for the after-text-edit-ended stack.
SdrTableObj* pTableObj = dynamic_cast<sdr::table::SdrTableObj*>(&rObj);
@@ -1019,7 +1001,7 @@
{
::SolarMutexGuard aGuard;
if( (mpProperties == nullptr) || (GetModel() == nullptr) )
if(mpProperties == nullptr)
throw DisposedException();
const SfxItemPropertySimpleEntry* pMap = mpPropSet->getPropertyMapEntry(rPropertyName);
@@ -1111,7 +1093,7 @@
}
default:
{
SfxItemSet aSet( GetModel()->GetItemPool(), {{pMap->nWID, pMap->nWID}});
SfxItemSet aSet(GetObject().getSdrModelFromSdrObject().GetItemPool(), {{pMap->nWID, pMap->nWID}});
aSet.Put(mpProperties->GetItem(pMap->nWID));
bool bSpecial = false;
@@ -1131,7 +1113,7 @@
OUString aApiName;
if( rValue >>= aApiName )
{
if( SvxShape::SetFillAttribute( pMap->nWID, aApiName, aSet, GetModel() ) )
if(SvxShape::SetFillAttribute(pMap->nWID, aApiName, aSet, &GetObject().getSdrModelFromSdrObject()))
bSpecial = true;
}
}
@@ -1148,7 +1130,7 @@
{
// fetch the default from ItemPool
if(SfxItemPool::IsWhich(pMap->nWID))
aSet.Put(GetModel()->GetItemPool().GetDefaultItem(pMap->nWID));
aSet.Put(GetObject().getSdrModelFromSdrObject().GetItemPool().GetDefaultItem(pMap->nWID));
}
if( aSet.GetItemState( pMap->nWID ) == SfxItemState::SET )
@@ -1158,7 +1140,7 @@
}
}
GetModel()->SetChanged();
GetObject().getSdrModelFromSdrObject().SetChanged();
mpProperties->SetMergedItemSetAndBroadcast( aSet );
return;
}
@@ -1172,7 +1154,7 @@
{
::SolarMutexGuard aGuard;
if( (mpProperties == nullptr) || (GetModel() == nullptr) )
if(mpProperties == nullptr)
throw DisposedException();
const SfxItemPropertySimpleEntry* pMap = mpPropSet->getPropertyMapEntry(PropertyName);
@@ -1231,7 +1213,7 @@
}
default:
{
SfxItemSet aSet( GetModel()->GetItemPool(), {{pMap->nWID, pMap->nWID}});
SfxItemSet aSet(GetObject().getSdrModelFromSdrObject().GetItemPool(), {{pMap->nWID, pMap->nWID}});
aSet.Put(mpProperties->GetItem(pMap->nWID));
Any aAny;
@@ -1241,7 +1223,7 @@
{
// fetch the default from ItemPool
if(SfxItemPool::IsWhich(pMap->nWID))
aSet.Put(GetModel()->GetItemPool().GetDefaultItem(pMap->nWID));
aSet.Put(GetObject().getSdrModelFromSdrObject().GetItemPool().GetDefaultItem(pMap->nWID));
}
if( aSet.Count() )
@@ -1283,7 +1265,7 @@
{
::SolarMutexGuard aSolarGuard;
if( (mpProperties == nullptr) || (GetModel() == nullptr) )
if(mpProperties == nullptr)
throw DisposedException();
const sal_Int32 nCount = aPropertyNames.getLength();
@@ -1313,7 +1295,7 @@
{
::SolarMutexGuard aSolarGuard;
if( (mpProperties == nullptr) || (GetModel() == nullptr) )
if(mpProperties == nullptr)
throw DisposedException();
const sal_Int32 nCount = aPropertyNames.getLength();
@@ -1364,7 +1346,7 @@
{
::SolarMutexGuard aGuard;
if( (mpProperties == nullptr) || (GetModel() == nullptr) )
if(mpProperties == nullptr)
throw DisposedException();
const SfxItemPropertySimpleEntry* pMap = mpPropSet->getPropertyMapEntry(PropertyName);
@@ -1467,7 +1449,7 @@
{
::SolarMutexGuard aGuard;
if( (mpProperties == nullptr) || (GetModel() == nullptr) )
if(mpProperties == nullptr)
throw DisposedException();
const sal_Int32 nCount = aPropertyName.getLength();
@@ -1497,7 +1479,7 @@
{
::SolarMutexGuard aGuard;
if( (mpProperties == nullptr) || (GetModel() == nullptr) )
if(mpProperties == nullptr)
throw DisposedException();
const SfxItemPropertySimpleEntry* pMap = mpPropSet->getPropertyMapEntry(PropertyName);
@@ -1527,7 +1509,7 @@
}
}
GetModel()->SetChanged();
GetObject().getSdrModelFromSdrObject().SetChanged();
return;
}
throw UnknownPropertyException( PropertyName, static_cast<cppu::OWeakObject*>(this));
@@ -1538,7 +1520,7 @@
{
::SolarMutexGuard aGuard;
if( (mpProperties == nullptr) || (GetModel() == nullptr) )
if(mpProperties == nullptr)
throw DisposedException();
const SfxItemPropertySimpleEntry* pMap = mpPropSet->getPropertyMapEntry(aPropertyName);
@@ -1565,8 +1547,8 @@
{
if( SfxItemPool::IsWhich(pMap->nWID) )
{
SfxItemSet aSet( GetModel()->GetItemPool(), {{pMap->nWID, pMap->nWID}});
aSet.Put(GetModel()->GetItemPool().GetDefaultItem(pMap->nWID));
SfxItemSet aSet(GetObject().getSdrModelFromSdrObject().GetItemPool(), {{pMap->nWID, pMap->nWID}});
aSet.Put(GetObject().getSdrModelFromSdrObject().GetItemPool().GetDefaultItem(pMap->nWID));
return GetAnyForItem( aSet, pMap );
}
}
diff --git a/svx/source/table/cellcursor.cxx b/svx/source/table/cellcursor.cxx
index db68fdb..b636883 100644
--- a/svx/source/table/cellcursor.cxx
+++ b/svx/source/table/cellcursor.cxx
@@ -242,11 +242,11 @@
if( !mxTable.is() || (mxTable->getSdrTableObj() == nullptr) )
throw DisposedException();
SdrModel* pModel = mxTable->getSdrTableObj()->GetModel();
const bool bUndo = pModel && mxTable->getSdrTableObj()->IsInserted() && pModel->IsUndoEnabled();
SdrModel& rModel(mxTable->getSdrTableObj()->getSdrModelFromSdrObject());
const bool bUndo(mxTable->getSdrTableObj()->IsInserted() && rModel.IsUndoEnabled());
if( bUndo )
pModel->BegUndo( ImpGetResStr(STR_TABLE_MERGE) );
rModel.BegUndo( ImpGetResStr(STR_TABLE_MERGE) );
try
{
@@ -260,10 +260,9 @@
}
if( bUndo )
pModel->EndUndo();
rModel.EndUndo();
if( pModel )
pModel->SetChanged();
rModel.SetChanged();
}
@@ -503,10 +502,11 @@
if( !mxTable.is() || (mxTable->getSdrTableObj() == nullptr) )
throw DisposedException();
SdrModel* pModel = mxTable->getSdrTableObj()->GetModel();
const bool bUndo = pModel && mxTable->getSdrTableObj()->IsInserted() && pModel->IsUndoEnabled();
SdrModel& rModel(mxTable->getSdrTableObj()->getSdrModelFromSdrObject());
const bool bUndo(mxTable->getSdrTableObj()->IsInserted() && rModel.IsUndoEnabled());
if( bUndo )
pModel->BegUndo( ImpGetResStr(STR_TABLE_SPLIT) );
rModel.BegUndo( ImpGetResStr(STR_TABLE_SPLIT) );
try
{
@@ -526,10 +526,9 @@
}
if( bUndo )
pModel->EndUndo();
rModel.EndUndo();
if( pModel )
pModel->SetChanged();
rModel.SetChanged();
}
diff --git a/svx/source/table/svdotable.cxx b/svx/source/table/svdotable.cxx
index dab61a9..f8b2362 100644
--- a/svx/source/table/svdotable.cxx
+++ b/svx/source/table/svdotable.cxx
@@ -684,7 +684,7 @@
void SdrTableObjImpl::LayoutTable( tools::Rectangle& rArea, bool bFitWidth, bool bFitHeight )
{
if( mpLayouter && mpTableObj->GetModel() )
if(mpLayouter)
{
// Optimization: SdrTableObj::SetChanged() can call this very often, repeatedly
// with the same settings, noticeably increasing load time. Skip if already done.
@@ -749,20 +749,20 @@
return new sdr::contact::ViewContactOfTableObj(*this);
}
SdrTableObj::SdrTableObj(SdrModel* _pModel)
SdrTableObj::SdrTableObj(SdrModel& rSdrModel)
: SdrTextObj(rSdrModel)
{
pModel = _pModel;
init( 1, 1 );
}
SdrTableObj::SdrTableObj(SdrModel* _pModel, const ::tools::Rectangle& rNewRect, sal_Int32 nColumns, sal_Int32 nRows)
: SdrTextObj( rNewRect )
, maLogicRect( rNewRect )
SdrTableObj::SdrTableObj(
SdrModel& rSdrModel,
const ::tools::Rectangle& rNewRect,
sal_Int32 nColumns,
sal_Int32 nRows)
: SdrTextObj(rSdrModel, rNewRect)
,maLogicRect(rNewRect)
{
pModel = _pModel;
if( nColumns <= 0 )
nColumns = 1;
@@ -779,6 +779,16 @@
mpImpl = new SdrTableObjImpl;
mpImpl->init( this, nColumns, nRows );
// Stuff done from old SetModel:
if( !maLogicRect.IsEmpty() )
{
maRect = maLogicRect;
mpImpl->LayoutTable( maRect, false, false );
}
// Also init from old SetModel:
mpImpl->SetModel(&getSdrModelFromSdrObject());
}
@@ -1349,28 +1359,6 @@
return static_cast<sal_uInt16>(OBJ_TABLE);
}
void SdrTableObj::SetModel(SdrModel* pNewModel)
{
SdrModel* pOldModel = GetModel();
if( pNewModel != pOldModel )
{
SdrTextObj::SetModel(pNewModel);
if( mpImpl.is() )
{
mpImpl->SetModel( pNewModel );
if( !maLogicRect.IsEmpty() )
{
maRect = maLogicRect;
mpImpl->LayoutTable( maRect, false, false );
}
}
}
}
void SdrTableObj::TakeTextRect( SdrOutliner& rOutliner, tools::Rectangle& rTextRect, bool bNoEditText, tools::Rectangle* pAnchorRect, bool /*bLineWidth*/ ) const
{
if( mpImpl.is() )
@@ -1418,9 +1406,9 @@
if (pPara)
{
const bool bHitTest = pModel && (&pModel->GetHitTestOutliner() == &rOutliner);
const bool bHitTest(&getSdrModelFromSdrObject().GetHitTestOutliner() == &rOutliner);
const SdrTextObj* pTestObj(rOutliner.GetTextObj());
const SdrTextObj* pTestObj = rOutliner.GetTextObj();
if( !pTestObj || !bHitTest || (pTestObj != this) || (pTestObj->GetOutlinerParaObject() != xCell->GetOutlinerParaObject()) )
{
if( bHitTest ) // #i33696# take back fix #i27510#
@@ -1565,12 +1553,9 @@
aAnkSiz.AdjustWidth( -1 ); aAnkSiz.AdjustHeight( -1 ); // because GetSize() increments by one
Size aMaxSiz(aAnkSiz.Width(),1000000);
if (pModel!=nullptr)
{
Size aTmpSiz(pModel->GetMaxObjSize());
if (aTmpSiz.Height()!=0)
aMaxSiz.setHeight(aTmpSiz.Height() );
}
Size aTmpSiz(getSdrModelFromSdrObject().GetMaxObjSize());
if (aTmpSiz.Height()!=0)
aMaxSiz.setHeight(aTmpSiz.Height() );
CellRef xCell( mpImpl->getCell( rPos ) );
SdrTextVertAdjust eVAdj = xCell.is() ? xCell->GetTextVerticalAdjust() : SDRTEXTVERTADJUST_TOP;
@@ -1661,9 +1646,9 @@
}
SdrTableObj* SdrTableObj::Clone() const
SdrTableObj* SdrTableObj::Clone(SdrModel* pTargetModel) const
{
return CloneHelper< SdrTableObj >();
return CloneHelper< SdrTableObj >(pTargetModel);
}
SdrTableObj& SdrTableObj::operator=(const SdrTableObj& rObj)
@@ -1724,20 +1709,20 @@
mbInEditMode = true;
rOutl.Init( OutlinerMode::TextObject );
rOutl.SetRefDevice( pModel->GetRefDevice() );
rOutl.SetRefDevice(getSdrModelFromSdrObject().GetRefDevice());
bool bUpdMerk=rOutl.GetUpdateMode();
if (bUpdMerk) rOutl.SetUpdateMode(false);
Size aPaperMin;
Size aPaperMax;
tools::Rectangle aEditArea;
TakeTextEditArea(&aPaperMin,&aPaperMax,&aEditArea,nullptr);
bool bUpdMerk=rOutl.GetUpdateMode();
if (bUpdMerk) rOutl.SetUpdateMode(false);
Size aPaperMin;
Size aPaperMax;
tools::Rectangle aEditArea;
TakeTextEditArea(&aPaperMin,&aPaperMax,&aEditArea,nullptr);
rOutl.SetMinAutoPaperSize(aPaperMin);
rOutl.SetMaxAutoPaperSize(aPaperMax);
rOutl.SetPaperSize(aPaperMax);
rOutl.SetMinAutoPaperSize(aPaperMin);
rOutl.SetMaxAutoPaperSize(aPaperMax);
rOutl.SetPaperSize(aPaperMax);
if (bUpdMerk) rOutl.SetUpdateMode(true);
if (bUpdMerk) rOutl.SetUpdateMode(true);
EEControlBits nStat=rOutl.GetControlWord();
nStat |= EEControlBits::AUTOPAGESIZE;
@@ -1758,14 +1743,14 @@
void SdrTableObj::EndTextEdit(SdrOutliner& rOutl)
{
if (GetModel() && GetModel()->IsUndoEnabled() && !mpImpl->maUndos.empty())
if (getSdrModelFromSdrObject().IsUndoEnabled() && !mpImpl->maUndos.empty())
{
// These actions should be on the undo stack after text edit.
for (std::unique_ptr<SdrUndoAction>& pAction : mpImpl->maUndos)
GetModel()->AddUndo(pAction.release());
getSdrModelFromSdrObject().AddUndo(pAction.release());
mpImpl->maUndos.clear();
GetModel()->AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoGeoObject(*this));
getSdrModelFromSdrObject().AddUndo(getSdrModelFromSdrObject().GetSdrUndoFactory().CreateUndoGeoObject(*this));
}
if(rOutl.IsModified())
@@ -1810,16 +1795,15 @@
CellRef xCell( getActiveCell() );
if( xCell.is() )
{
if( pModel )
// Update HitTestOutliner
const SdrTextObj* pTestObj(getSdrModelFromSdrObject().GetHitTestOutliner().GetTextObj());
if(pTestObj && pTestObj->GetOutlinerParaObject() == xCell->GetOutlinerParaObject())
{
// Update HitTestOutliner
const SdrTextObj* pTestObj = pModel->GetHitTestOutliner().GetTextObj();
if( pTestObj && pTestObj->GetOutlinerParaObject() == xCell->GetOutlinerParaObject() )
pModel->GetHitTestOutliner().SetTextObj( nullptr );
getSdrModelFromSdrObject().GetHitTestOutliner().SetTextObj(nullptr);
}
xCell->SetOutlinerParaObject( pTextObject );
SetTextSizeDirty();
NbcAdjustTextFrameWidthAndHeight();
}
@@ -1891,7 +1875,7 @@
bool SdrTableObj::AdjustTextFrameWidthAndHeight(tools::Rectangle& rR, bool bHeight, bool bWidth) const
{
if((pModel == nullptr) || rR.IsEmpty() || !mpImpl.is() || !mpImpl->mxTable.is() )
if(rR.IsEmpty() || !mpImpl.is() || !mpImpl->mxTable.is())
return false;
tools::Rectangle aRectangle( rR );
@@ -2203,7 +2187,7 @@
if( pEdgeHdl )
{
if( GetModel() && IsInserted() )
if( IsInserted() )
{
rDrag.SetEndDragChangesAttributes(true);
rDrag.SetEndDragChangesLayout(true);
@@ -2341,12 +2325,21 @@
}
SdrTableObj* SdrTableObj::CloneRange( const CellPos& rStart, const CellPos& rEnd )
SdrTableObj* SdrTableObj::CloneRange(
const CellPos& rStart,
const CellPos& rEnd,
SdrModel& rTargetModel)
{
const sal_Int32 nColumns = rEnd.mnCol - rStart.mnCol + 1;
const sal_Int32 nRows = rEnd.mnRow - rStart.mnRow + 1;
SdrTableObj* pNewTableObj = new SdrTableObj( GetModel(), GetCurrentBoundRect(), nColumns, nRows);
SdrTableObj* pNewTableObj(
new SdrTableObj(
rTargetModel,
GetCurrentBoundRect(),
nColumns,
nRows));
pNewTableObj->setTableStyleSettings( getTableStyleSettings() );
pNewTableObj->setTableStyle( getTableStyle() );
diff --git a/svx/source/table/tablecolumn.cxx b/svx/source/table/tablecolumn.cxx
index e6f1c4a..e4007b3 100644
--- a/svx/source/table/tablecolumn.cxx
+++ b/svx/source/table/tablecolumn.cxx
@@ -141,10 +141,10 @@
bool bOk = false;
bool bChange = false;
SdrModel* pModel = mxTableModel->getSdrTableObj()->GetModel();
SdrModel& rModel(mxTableModel->getSdrTableObj()->getSdrModelFromSdrObject());
TableColumnUndo* pUndo = nullptr;
if( mxTableModel.is() && mxTableModel->getSdrTableObj() && mxTableModel->getSdrTableObj()->IsInserted() && pModel && pModel->IsUndoEnabled() )
if( mxTableModel.is() && mxTableModel->getSdrTableObj() && mxTableModel->getSdrTableObj()->IsInserted() && rModel.IsUndoEnabled() )
{
TableColumnRef xThis( this );
pUndo = new TableColumnUndo( xThis );
@@ -214,7 +214,7 @@
{
if( pUndo )
{
pModel->AddUndo( pUndo );
rModel.AddUndo( pUndo );
pUndo = nullptr;
}
mxTableModel->setModified(true);
diff --git a/svx/source/table/tablecontroller.cxx b/svx/source/table/tablecontroller.cxx
index cc0b6de..aaf4af7 100644
--- a/svx/source/table/tablecontroller.cxx
+++ b/svx/source/table/tablecontroller.cxx
@@ -140,35 +140,44 @@
// class SvxTableController
rtl::Reference< sdr::SelectionController > CreateTableController( SdrObjEditView* pView, const SdrTableObj* pObj, const rtl::Reference< sdr::SelectionController >& xRefController )
rtl::Reference< sdr::SelectionController > CreateTableController(
SdrView& rView,
const SdrTableObj& rObj,
const rtl::Reference< sdr::SelectionController >& xRefController )
{
return SvxTableController::create( pView, pObj, xRefController );
return SvxTableController::create(rView, rObj, xRefController);
}
rtl::Reference< sdr::SelectionController > SvxTableController::create( SdrObjEditView* pView, const SdrTableObj* pObj, const rtl::Reference< sdr::SelectionController >& xRefController )
rtl::Reference< sdr::SelectionController > SvxTableController::create(
SdrView& rView,
const SdrTableObj& rObj,
const rtl::Reference< sdr::SelectionController >& xRefController )
{
if( xRefController.is() )
{
SvxTableController* pController = dynamic_cast< SvxTableController* >( xRefController.get() );
if( pController && (pController->mxTableObj.get() == pObj) && (pController->mpView == pView) )
if(pController && (pController->mxTableObj.get() == &rObj) && (&pController->mrView == &rView))
{
return xRefController;
}
}
return new SvxTableController( pView, pObj );
return new SvxTableController(rView, rObj);
}
SvxTableController::SvxTableController( SdrObjEditView* pView, const SdrTableObj* pObj )
: mbCellSelectionMode(false)
, mbLeftButtonDown(false)
, mpSelectionOverlay(nullptr)
, mpView( dynamic_cast< SdrView* >( pView ) )
, mxTableObj( const_cast< SdrTableObj* >( pObj ) )
, mpModel( nullptr )
, mnUpdateEvent( nullptr )
SvxTableController::SvxTableController(
SdrView& rView,
const SdrTableObj& rObj)
: mbCellSelectionMode(false)
,mbLeftButtonDown(false)
,mpSelectionOverlay(nullptr)
,mrView(rView)
,mxTableObj(const_cast< SdrTableObj* >(&rObj))
,mnUpdateEvent( nullptr )
{
mpModel = mxTableObj->GetModel();
mxTableObj->getActiveCellPos( maCursorFirstPos );
maCursorLastPos = maCursorFirstPos;
@@ -202,11 +211,14 @@
bool SvxTableController::onKeyInput(const KeyEvent& rKEvt, vcl::Window* pWindow )
{
if( !checkTableObject() )
if(!checkTableObject())
return false;
SdrTableObj& rTableObj(*mxTableObj.get());
SdrModel& rModel(rTableObj.getSdrModelFromSdrObject());
// check if we are read only
if( mpModel && mpModel->IsReadOnly())
if( rModel.IsReadOnly())
{
switch( rKEvt.GetKeyCode().GetCode() )
{
@@ -252,7 +264,7 @@
if (comphelper::LibreOfficeKit::isActive() && !pWindow)
{
// Tiled rendering: get the window that has the disabled map mode.
if (OutputDevice* pOutputDevice = mpView->GetFirstOutputDevice())
if (OutputDevice* pOutputDevice = mrView.GetFirstOutputDevice())
{
if (pOutputDevice->GetOutDevType() == OUTDEV_WINDOW)
pWindow = static_cast<vcl::Window*>(pOutputDevice);
@@ -263,7 +275,7 @@
return false;
SdrViewEvent aVEvt;
if( !rMEvt.IsRight() && mpView->PickAnything(rMEvt,SdrMouseEventKind::BUTTONDOWN, aVEvt) == SdrHitKind::Handle )
if( !rMEvt.IsRight() && mrView.PickAnything(rMEvt,SdrMouseEventKind::BUTTONDOWN, aVEvt) == SdrHitKind::Handle )
return false;
TableHitKind eHit = mxTableObj->CheckTableHit(pixelToLogic(rMEvt.GetPosPixel(), pWindow), maMouseDownPos.mnCol, maMouseDownPos.mnRow);
@@ -284,7 +296,7 @@
{
RemoveSelection();
SdrHdl* pHdl = mpView->PickHandle(pixelToLogic(rMEvt.GetPosPixel(), pWindow));
SdrHdl* pHdl = mrView.PickHandle(pixelToLogic(rMEvt.GetPosPixel(), pWindow));
if( pHdl )
{
@@ -304,7 +316,7 @@
if (comphelper::LibreOfficeKit::isActive() && rMEvt.GetClicks() == 2 && rMEvt.IsLeft() && eHit == TableHitKind::CellTextArea)
{
bool bEmptyOutliner = false;
if (Outliner* pOutliner = mpView->GetTextEditOutliner())
if (Outliner* pOutliner = mrView.GetTextEditOutliner())
{
if (pOutliner->GetParagraphCount() == 1)
{
@@ -318,7 +330,7 @@
StartSelection(maMouseDownPos);
setSelectedCells(maMouseDownPos, maMouseDownPos);
// Update graphic selection, should be hidden now.
mpView->AdjustMarkHdl();
mrView.AdjustMarkHdl();
return true;
}
}
@@ -382,7 +394,7 @@
}
else
{
const SdrMarkList& rMarkList= mpView->GetMarkedObjectList();
const SdrMarkList& rMarkList= mrView.GetMarkedObjectList();
if( rMarkList.GetMarkCount() == 1 )
bSelected = mxTableObj.get() == rMarkList.GetMark(0)->GetMarkedSdrObj();
/* fdo#46186 Selecting the table means selecting the entire cells */
@@ -407,12 +419,13 @@
void SvxTableController::GetState( SfxItemSet& rSet )
{
if( !mxTable.is() || !mxTableObj.is() || !mxTableObj->GetModel() )
if(!mxTable.is() || !mxTableObj.is())
return;
SdrTableObj& rTableObj(*mxTableObj.get());
SdrModel& rModel(rTableObj.getSdrModelFromSdrObject());
std::unique_ptr<SfxItemSet> xSet;
bool bVertDone = false;
bool bVertDone(false);
// Iterate over all requested items in the set.
SfxWhichIter aIter( rSet );
@@ -425,15 +438,11 @@
case SID_TABLE_VERT_CENTER:
case SID_TABLE_VERT_NONE:
{
if( !mxTable.is() || !mxTableObj->GetModel() )
{
rSet.DisableItem(nWhich);
}
else if(!bVertDone)
if(!bVertDone)
{
if (!xSet)
{
xSet.reset(new SfxItemSet( mxTableObj->GetModel()->GetItemPool() ));
xSet.reset(new SfxItemSet(rModel.GetItemPool()));
MergeAttrFromSelectedCells(*xSet, false);
}
@@ -505,277 +514,270 @@
void SvxTableController::onInsert( sal_uInt16 nSId, const SfxItemSet* pArgs )
{
sdr::table::SdrTableObj* pTableObj = mxTableObj.get();
if( !pTableObj )
if(!checkTableObject())
return;
if( mxTable.is() ) try
SdrTableObj& rTableObj(*mxTableObj.get());
SdrModel& rModel(rTableObj.getSdrModelFromSdrObject());
bool bInsertAfter = true;
sal_uInt16 nCount = 0;
if( pArgs )
{
bool bInsertAfter = true;
sal_uInt16 nCount = 0;
if( pArgs )
const SfxPoolItem* pItem = nullptr;
pArgs->GetItemState(nSId, false, &pItem);
if (pItem)
{
const SfxPoolItem* pItem = nullptr;
pArgs->GetItemState(nSId, false, &pItem);
if (pItem)
{
nCount = static_cast<const SfxInt16Item*>(pItem)->GetValue();
if(SfxItemState::SET == pArgs->GetItemState(SID_TABLE_PARAM_INSERT_AFTER, true, &pItem))
bInsertAfter = static_cast<const SfxBoolItem*>(pItem)->GetValue();
}
nCount = static_cast<const SfxInt16Item*>(pItem)->GetValue();
if(SfxItemState::SET == pArgs->GetItemState(SID_TABLE_PARAM_INSERT_AFTER, true, &pItem))
bInsertAfter = static_cast<const SfxBoolItem*>(pItem)->GetValue();
}
}
CellPos aStart, aEnd;
if( hasSelectedCells() )
{
getSelectedCells( aStart, aEnd );
}
else
{
if( bInsertAfter )
{
aStart.mnCol = mxTable->getColumnCount() - 1;
aStart.mnRow = mxTable->getRowCount() - 1;
aEnd = aStart;
}
}
if( rTableObj.IsTextEditActive() )
mrView.SdrEndTextEdit(true);
RemoveSelection();
const OUString sSize( "Size" );
const bool bUndo(rModel.IsUndoEnabled());
switch( nSId )
{
case SID_TABLE_INSERT_COL:
{
TableModelNotifyGuard aGuard( mxTable.get() );
if( bUndo )
{
rModel.BegUndo( ImpGetResStr(STR_TABLE_INSCOL) );
rModel.AddUndo(rModel.GetSdrUndoFactory().CreateUndoGeoObject(rTableObj));
}
CellPos aStart, aEnd;
if( hasSelectedCells() )
Reference< XTableColumns > xCols( mxTable->getColumns() );
const sal_Int32 nNewColumns = (nCount == 0) ? (aEnd.mnCol - aStart.mnCol + 1) : nCount;
const sal_Int32 nNewStartColumn = aEnd.mnCol + (bInsertAfter ? 1 : 0);
xCols->insertByIndex( nNewStartColumn, nNewColumns );
for( sal_Int32 nOffset = 0; nOffset < nNewColumns; nOffset++ )
{
getSelectedCells( aStart, aEnd );
}
else
{
if( bInsertAfter )
{
aStart.mnCol = mxTable->getColumnCount() - 1;
aStart.mnRow = mxTable->getRowCount() - 1;
aEnd = aStart;
}
// Resolves fdo#61540
// On Insert before, the reference column whose size is going to be
// used for newly created column(s) is wrong. As the new columns are
// inserted before the reference column, the reference column moved
// to the new position by no., of new columns i.e (earlier+newcolumns).
Reference< XPropertySet >(xCols->getByIndex(nNewStartColumn+nOffset), UNO_QUERY_THROW )->
setPropertyValue( sSize,
Reference< XPropertySet >(xCols->getByIndex( bInsertAfter?nNewStartColumn-1:nNewStartColumn+nNewColumns ), UNO_QUERY_THROW )->
getPropertyValue( sSize ) );
}
if( pTableObj->IsTextEditActive() )
mpView->SdrEndTextEdit(true);
// Copy cell properties
sal_Int32 nPropSrcCol = (bInsertAfter ? aEnd.mnCol : aStart.mnCol + nNewColumns);
sal_Int32 nRowSpan = 0;
bool bNewSpan = false;
RemoveSelection();
const OUString sSize( "Size" );
const bool bUndo = mpModel && mpModel->IsUndoEnabled();
switch( nSId )
for( sal_Int32 nRow = 0; nRow < mxTable->getRowCount(); ++nRow )
{
case SID_TABLE_INSERT_COL:
{
TableModelNotifyGuard aGuard( mxTable.get() );
CellRef xSourceCell( dynamic_cast< Cell* >( mxTable->getCellByPosition( nPropSrcCol, nRow ).get() ) );
if( bUndo )
// When we insert new COLUMNs, we want to copy ROW spans.
if (xSourceCell.is() && nRowSpan == 0)
{
mpModel->BegUndo( ImpGetResStr(STR_TABLE_INSCOL) );
mpModel->AddUndo( mpModel->GetSdrUndoFactory().CreateUndoGeoObject(*pTableObj) );
// we are not in a span yet. Let's find out if the current cell is in a span.
sal_Int32 nColSpan = sal_Int32();
sal_Int32 nSpanInfoCol = sal_Int32();
if( xSourceCell->getRowSpan() > 1 )
{
// The current cell is the top-left cell in a span.
// Get the span info and propagate it to the target.
nRowSpan = xSourceCell->getRowSpan();
nColSpan = xSourceCell->getColumnSpan();
nSpanInfoCol = nPropSrcCol;
}
else if( xSourceCell->isMerged() )
{
// The current cell is a middle cell in a 2D span.
// Look for the top-left cell in the span.
for( nSpanInfoCol = nPropSrcCol - 1; nSpanInfoCol >= 0; --nSpanInfoCol )
{
CellRef xMergeInfoCell( dynamic_cast< Cell* >( mxTable->getCellByPosition( nSpanInfoCol, nRow ).get() ) );
if (xMergeInfoCell.is() && !xMergeInfoCell->isMerged())
{
nRowSpan = xMergeInfoCell->getRowSpan();
nColSpan = xMergeInfoCell->getColumnSpan();
break;
}
}
if( nRowSpan == 1 )
nRowSpan = 0;
}
// The target columns are outside the span; Start a new span.
if( nRowSpan > 0 && ( nNewStartColumn < nSpanInfoCol || nSpanInfoCol + nColSpan <= nNewStartColumn ) )
bNewSpan = true;
}
Reference< XTableColumns > xCols( mxTable->getColumns() );
const sal_Int32 nNewColumns = (nCount == 0) ? (aEnd.mnCol - aStart.mnCol + 1) : nCount;
const sal_Int32 nNewStartColumn = aEnd.mnCol + (bInsertAfter ? 1 : 0);
xCols->insertByIndex( nNewStartColumn, nNewColumns );
// Now copy the properties from the source to the targets
for( sal_Int32 nOffset = 0; nOffset < nNewColumns; nOffset++ )
{
// Resolves fdo#61540
// On Insert before, the reference column whose size is going to be
// used for newly created column(s) is wrong. As the new columns are
// inserted before the reference column, the reference column moved
// to the new position by no., of new columns i.e (earlier+newcolumns).
Reference< XPropertySet >(xCols->getByIndex(nNewStartColumn+nOffset), UNO_QUERY_THROW )->
setPropertyValue( sSize,
Reference< XPropertySet >(xCols->getByIndex( bInsertAfter?nNewStartColumn-1:nNewStartColumn+nNewColumns ), UNO_QUERY_THROW )->
getPropertyValue( sSize ) );
CellRef xTargetCell( dynamic_cast< Cell* >( mxTable->getCellByPosition( nNewStartColumn + nOffset, nRow ).get() ) );
if( xTargetCell.is() )
{
if( nRowSpan > 0 )
{
if( bNewSpan )
xTargetCell->merge( 1, nRowSpan );
else
xTargetCell->setMerged();
}
xTargetCell->copyFormatFrom( xSourceCell );
}
}
// Copy cell properties
sal_Int32 nPropSrcCol = (bInsertAfter ? aEnd.mnCol : aStart.mnCol + nNewColumns);
sal_Int32 nRowSpan = 0;
bool bNewSpan = false;
for( sal_Int32 nRow = 0; nRow < mxTable->getRowCount(); ++nRow )
if( nRowSpan > 0 )
{
CellRef xSourceCell( dynamic_cast< Cell* >( mxTable->getCellByPosition( nPropSrcCol, nRow ).get() ) );
// When we insert new COLUMNs, we want to copy ROW spans.
if (xSourceCell.is() && nRowSpan == 0)
{
// we are not in a span yet. Let's find out if the current cell is in a span.
sal_Int32 nColSpan = sal_Int32();
sal_Int32 nSpanInfoCol = sal_Int32();
if( xSourceCell->getRowSpan() > 1 )
{
// The current cell is the top-left cell in a span.
// Get the span info and propagate it to the target.
nRowSpan = xSourceCell->getRowSpan();
nColSpan = xSourceCell->getColumnSpan();
nSpanInfoCol = nPropSrcCol;
}
else if( xSourceCell->isMerged() )
{
// The current cell is a middle cell in a 2D span.
// Look for the top-left cell in the span.
for( nSpanInfoCol = nPropSrcCol - 1; nSpanInfoCol >= 0; --nSpanInfoCol )
{
CellRef xMergeInfoCell( dynamic_cast< Cell* >( mxTable->getCellByPosition( nSpanInfoCol, nRow ).get() ) );
if (xMergeInfoCell.is() && !xMergeInfoCell->isMerged())
{
nRowSpan = xMergeInfoCell->getRowSpan();
nColSpan = xMergeInfoCell->getColumnSpan();
break;
}
}
if( nRowSpan == 1 )
nRowSpan = 0;
}
// The target columns are outside the span; Start a new span.
if( nRowSpan > 0 && ( nNewStartColumn < nSpanInfoCol || nSpanInfoCol + nColSpan <= nNewStartColumn ) )
bNewSpan = true;
}
// Now copy the properties from the source to the targets
for( sal_Int32 nOffset = 0; nOffset < nNewColumns; nOffset++ )
{
CellRef xTargetCell( dynamic_cast< Cell* >( mxTable->getCellByPosition( nNewStartColumn + nOffset, nRow ).get() ) );
if( xTargetCell.is() )
{
if( nRowSpan > 0 )
{
if( bNewSpan )
xTargetCell->merge( 1, nRowSpan );
else
xTargetCell->setMerged();
}
xTargetCell->copyFormatFrom( xSourceCell );
}
}
if( nRowSpan > 0 )
{
--nRowSpan;
bNewSpan = false;
}
--nRowSpan;
bNewSpan = false;
}
if( bUndo )
mpModel->EndUndo();
aStart.mnCol = nNewStartColumn;
aStart.mnRow = 0;
aEnd.mnCol = aStart.mnCol + nNewColumns - 1;
aEnd.mnRow = mxTable->getRowCount() - 1;
break;
}
case SID_TABLE_INSERT_ROW:
{
TableModelNotifyGuard aGuard( mxTable.get() );
if( bUndo )
rModel.EndUndo();
if( bUndo )
{
mpModel->BegUndo( ImpGetResStr(STR_TABLE_INSROW ) );
mpModel->AddUndo( mpModel->GetSdrUndoFactory().CreateUndoGeoObject(*pTableObj) );
}
Reference< XTableRows > xRows( mxTable->getRows() );
const sal_Int32 nNewRows = (nCount == 0) ? (aEnd.mnRow - aStart.mnRow + 1) : nCount;
const sal_Int32 nNewRowStart = aEnd.mnRow + (bInsertAfter ? 1 : 0);
xRows->insertByIndex( nNewRowStart, nNewRows );
for( sal_Int32 nOffset = 0; nOffset < nNewRows; nOffset++ )
{
Reference< XPropertySet >( xRows->getByIndex( aEnd.mnRow + nOffset + 1 ), UNO_QUERY_THROW )->
setPropertyValue( sSize,
Reference< XPropertySet >( xRows->getByIndex( aStart.mnRow + nOffset ), UNO_QUERY_THROW )->
getPropertyValue( sSize ) );
}
// Copy the cell properties
sal_Int32 nPropSrcRow = (bInsertAfter ? aEnd.mnRow : aStart.mnRow + nNewRows);
sal_Int32 nColSpan = 0;
bool bNewSpan = false;
for( sal_Int32 nCol = 0; nCol < mxTable->getColumnCount(); ++nCol )
{
CellRef xSourceCell( dynamic_cast< Cell* >( mxTable->getCellByPosition( nCol, nPropSrcRow ).get() ) );
if (!xSourceCell.is())
continue;
// When we insert new ROWs, we want to copy COLUMN spans.
if( nColSpan == 0 )
{
// we are not in a span yet. Let's find out if the current cell is in a span.
sal_Int32 nRowSpan = sal_Int32();
sal_Int32 nSpanInfoRow = sal_Int32();
if( xSourceCell->getColumnSpan() > 1 )
{
// The current cell is the top-left cell in a span.
// Get the span info and propagate it to the target.
nColSpan = xSourceCell->getColumnSpan();
nRowSpan = xSourceCell->getRowSpan();
nSpanInfoRow = nPropSrcRow;
}
else if( xSourceCell->isMerged() )
{
// The current cell is a middle cell in a 2D span.
// Look for the top-left cell in the span.
for( nSpanInfoRow = nPropSrcRow - 1; nSpanInfoRow >= 0; --nSpanInfoRow )
{
CellRef xMergeInfoCell( dynamic_cast< Cell* >( mxTable->getCellByPosition( nCol, nSpanInfoRow ).get() ) );
if (xMergeInfoCell.is() && !xMergeInfoCell->isMerged())
{
nColSpan = xMergeInfoCell->getColumnSpan();
nRowSpan = xMergeInfoCell->getRowSpan();
break;
}
}
if( nColSpan == 1 )
nColSpan = 0;
}
// Inserted rows are outside the span; Start a new span.
if( nColSpan > 0 && ( nNewRowStart < nSpanInfoRow || nSpanInfoRow + nRowSpan <= nNewRowStart ) )
bNewSpan = true;
}
// Now copy the properties from the source to the targets
for( sal_Int32 nOffset = 0; nOffset < nNewRows; ++nOffset )
{
CellRef xTargetCell( dynamic_cast< Cell* >( mxTable->getCellByPosition( nCol, nNewRowStart + nOffset ).get() ) );
if( xTargetCell.is() )
{
if( nColSpan > 0 )
{
if( bNewSpan )
xTargetCell->merge( nColSpan, 1 );
else
xTargetCell->setMerged();
}
xTargetCell->copyFormatFrom( xSourceCell );
}
}
if( nColSpan > 0 )
{
--nColSpan;
bNewSpan = false;
}
}
if( bUndo )
mpModel->EndUndo();
aStart.mnCol = 0;
aStart.mnRow = nNewRowStart;
aEnd.mnCol = mxTable->getColumnCount() - 1;
aEnd.mnRow = aStart.mnRow + nNewRows - 1;
break;
}
}
StartSelection( aStart );
UpdateSelection( aEnd );
aStart.mnCol = nNewStartColumn;
aStart.mnRow = 0;
aEnd.mnCol = aStart.mnCol + nNewColumns - 1;
aEnd.mnRow = mxTable->getRowCount() - 1;
break;
}
catch( Exception& )
case SID_TABLE_INSERT_ROW:
{
OSL_FAIL("svx::SvxTableController::onInsert(), exception caught!");
TableModelNotifyGuard aGuard( mxTable.get() );
if( bUndo )
{
rModel.BegUndo( ImpGetResStr(STR_TABLE_INSROW ) );
rModel.AddUndo(rModel.GetSdrUndoFactory().CreateUndoGeoObject(rTableObj));
}
Reference< XTableRows > xRows( mxTable->getRows() );
const sal_Int32 nNewRows = (nCount == 0) ? (aEnd.mnRow - aStart.mnRow + 1) : nCount;
const sal_Int32 nNewRowStart = aEnd.mnRow + (bInsertAfter ? 1 : 0);
xRows->insertByIndex( nNewRowStart, nNewRows );
for( sal_Int32 nOffset = 0; nOffset < nNewRows; nOffset++ )
{
Reference< XPropertySet >( xRows->getByIndex( aEnd.mnRow + nOffset + 1 ), UNO_QUERY_THROW )->
setPropertyValue( sSize,
Reference< XPropertySet >( xRows->getByIndex( aStart.mnRow + nOffset ), UNO_QUERY_THROW )->
getPropertyValue( sSize ) );
}
// Copy the cell properties
sal_Int32 nPropSrcRow = (bInsertAfter ? aEnd.mnRow : aStart.mnRow + nNewRows);
sal_Int32 nColSpan = 0;
bool bNewSpan = false;
for( sal_Int32 nCol = 0; nCol < mxTable->getColumnCount(); ++nCol )
{
CellRef xSourceCell( dynamic_cast< Cell* >( mxTable->getCellByPosition( nCol, nPropSrcRow ).get() ) );
if (!xSourceCell.is())
continue;
// When we insert new ROWs, we want to copy COLUMN spans.
if( nColSpan == 0 )
{
// we are not in a span yet. Let's find out if the current cell is in a span.
sal_Int32 nRowSpan = sal_Int32();
sal_Int32 nSpanInfoRow = sal_Int32();
if( xSourceCell->getColumnSpan() > 1 )
{
// The current cell is the top-left cell in a span.
// Get the span info and propagate it to the target.
nColSpan = xSourceCell->getColumnSpan();
nRowSpan = xSourceCell->getRowSpan();
nSpanInfoRow = nPropSrcRow;
}
else if( xSourceCell->isMerged() )
{
// The current cell is a middle cell in a 2D span.
// Look for the top-left cell in the span.
for( nSpanInfoRow = nPropSrcRow - 1; nSpanInfoRow >= 0; --nSpanInfoRow )
{
CellRef xMergeInfoCell( dynamic_cast< Cell* >( mxTable->getCellByPosition( nCol, nSpanInfoRow ).get() ) );
if (xMergeInfoCell.is() && !xMergeInfoCell->isMerged())
{
nColSpan = xMergeInfoCell->getColumnSpan();
nRowSpan = xMergeInfoCell->getRowSpan();
break;
}
}
if( nColSpan == 1 )
nColSpan = 0;
}
// Inserted rows are outside the span; Start a new span.
if( nColSpan > 0 && ( nNewRowStart < nSpanInfoRow || nSpanInfoRow + nRowSpan <= nNewRowStart ) )
bNewSpan = true;
}
// Now copy the properties from the source to the targets
for( sal_Int32 nOffset = 0; nOffset < nNewRows; ++nOffset )
{
CellRef xTargetCell( dynamic_cast< Cell* >( mxTable->getCellByPosition( nCol, nNewRowStart + nOffset ).get() ) );
if( xTargetCell.is() )
{
if( nColSpan > 0 )
{
if( bNewSpan )
xTargetCell->merge( nColSpan, 1 );
else
xTargetCell->setMerged();
}
xTargetCell->copyFormatFrom( xSourceCell );
}
}
if( nColSpan > 0 )
{
--nColSpan;
bNewSpan = false;
}
}
if( bUndo )
rModel.EndUndo();
aStart.mnCol = 0;
aStart.mnRow = nNewRowStart;
aEnd.mnCol = mxTable->getColumnCount() - 1;
aEnd.mnRow = aStart.mnRow + nNewRows - 1;
break;
}
}
StartSelection( aStart );
UpdateSelection( aEnd );
}
@@ -791,7 +793,7 @@
getSelectedCells( aStart, aEnd );
if( pTableObj->IsTextEditActive() )
mpView->SdrEndTextEdit(true);
mrView.SdrEndTextEdit(true);
RemoveSelection();
@@ -830,7 +832,7 @@
}
if( bDeleteTable )
mpView->DeleteMarkedObj();
mrView.DeleteMarkedObj();
else
UpdateTableShape();
}
@@ -886,15 +888,16 @@
void SvxTableController::onFormatTable( SfxRequest const & rReq )
{
sdr::table::SdrTableObj* pTableObj = mxTableObj.get();
if( !pTableObj )
if(!mxTableObj.is())
return;
SdrTableObj& rTableObj(*mxTableObj.get());
SdrModel& rModel(rTableObj.getSdrModelFromSdrObject());
const SfxItemSet* pArgs = rReq.GetArgs();
if( !pArgs && pTableObj->GetModel() )
if(!pArgs)
{
SfxItemSet aNewAttr( pTableObj->GetModel()->GetItemPool() );
SfxItemSet aNewAttr(rModel.GetItemPool());
// merge drawing layer text distance items into SvxBoxItem used by the dialog
SvxBoxItem aBoxItem(mergeDrawinglayerTextDistancesAndSvxBoxItem(aNewAttr));
@@ -907,7 +910,11 @@
aNewAttr.Put( aBoxInfoItem );
SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
ScopedVclPtr<SfxAbstractTabDialog> xDlg( pFact ? pFact->CreateSvxFormatCellsDialog( &aNewAttr, pTableObj->GetModel(), pTableObj) : nullptr );
ScopedVclPtr<SfxAbstractTabDialog> xDlg( pFact ? pFact->CreateSvxFormatCellsDialog(
&aNewAttr,
rModel,
&rTableObj) : nullptr );
// Even Cancel Button is returning positive(101) value,
if (xDlg.get() && xDlg->Execute() == RET_OK)
{
@@ -1026,16 +1033,19 @@
void SvxTableController::SetTableStyle( const SfxItemSet* pArgs )
{
SdrTableObj* pTableObj = mxTableObj.get();
SdrModel* pModel = pTableObj ? pTableObj->GetModel() : nullptr;
if(!checkTableObject())
return;
if( !pTableObj || !pModel || !pArgs || (SfxItemState::SET != pArgs->GetItemState(SID_TABLE_STYLE, false)) )
SdrTableObj& rTableObj(*mxTableObj.get());
SdrModel& rModel(rTableObj.getSdrModelFromSdrObject());
if(!pArgs || (SfxItemState::SET != pArgs->GetItemState(SID_TABLE_STYLE, false)))
return;
const SfxStringItem* pArg = dynamic_cast< const SfxStringItem* >( &pArgs->Get( SID_TABLE_STYLE ) );
if( pArg && mxTable.is() ) try
{
Reference< XStyleFamiliesSupplier > xSFS( pModel->getUnoModel(), UNO_QUERY_THROW );
Reference< XStyleFamiliesSupplier > xSFS( rModel.getUnoModel(), UNO_QUERY_THROW );
Reference< XNameAccess > xFamilyNameAccess( xSFS->getStyleFamilies(), UNO_QUERY_THROW );
const OUString sFamilyName( "table" );
Reference< XNameAccess > xTableFamilyAccess( xFamilyNameAccess->getByName( sFamilyName ), UNO_QUERY_THROW );
@@ -1045,15 +1055,15 @@
// found table style with the same name
Reference< XIndexAccess > xNewTableStyle( xTableFamilyAccess->getByName( pArg->GetValue() ), UNO_QUERY_THROW );
const bool bUndo = pModel->IsUndoEnabled();
const bool bUndo = rModel.IsUndoEnabled();
if( bUndo )
{
pModel->BegUndo( ImpGetResStr(STR_TABLE_STYLE) );
pModel->AddUndo( new TableStyleUndo( *pTableObj ) );
rModel.BegUndo(ImpGetResStr(STR_TABLE_STYLE));
rModel.AddUndo(new TableStyleUndo(rTableObj));
}
pTableObj->setTableStyle( xNewTableStyle );
rTableObj.setTableStyle( xNewTableStyle );
const sal_Int32 nRowCount = mxTable->getRowCount();
const sal_Int32 nColCount = mxTable->getColumnCount();
@@ -1098,7 +1108,7 @@
}
if( bUndo )
pModel->EndUndo();
rModel.EndUndo();
}
}
catch( Exception& )
@@ -1109,14 +1119,13 @@
void SvxTableController::SetTableStyleSettings( const SfxItemSet* pArgs )
{
SdrTableObj* pTableObj = mxTableObj.get();
SdrModel* pModel = pTableObj ? pTableObj->GetModel() : nullptr;
if( !pTableObj || !pModel )
if(!checkTableObject())
return;
TableStyleSettings aSettings( pTableObj->getTableStyleSettings() );
SdrTableObj& rTableObj(*mxTableObj.get());
SdrModel& rModel(rTableObj.getSdrModelFromSdrObject());
TableStyleSettings aSettings(rTableObj.getTableStyleSettings() );
const SfxPoolItem *pPoolItem=nullptr;
if( SfxItemState::SET == pArgs->GetItemState(ID_VAL_USEFIRSTROWSTYLE, false,&pPoolItem) )
@@ -1137,36 +1146,38 @@
if( SfxItemState::SET == pArgs->GetItemState(ID_VAL_USEBANDINGCOLUMNSTYLE, false,&pPoolItem) )
aSettings.mbUseColumnBanding = static_cast< const SfxBoolItem* >(pPoolItem)->GetValue();
if( aSettings == pTableObj->getTableStyleSettings() )
if( aSettings == rTableObj.getTableStyleSettings() )
return;
const bool bUndo = pModel->IsUndoEnabled();
const bool bUndo(rModel.IsUndoEnabled());
if( bUndo )
{
pModel->BegUndo( ImpGetResStr(STR_TABLE_STYLE_SETTINGS) );
pModel->AddUndo( new TableStyleUndo( *pTableObj ) );
rModel.BegUndo( ImpGetResStr(STR_TABLE_STYLE_SETTINGS) );
rModel.AddUndo(new TableStyleUndo(rTableObj));
}
pTableObj->setTableStyleSettings( aSettings );
rTableObj.setTableStyleSettings( aSettings );
if( bUndo )
pModel->EndUndo();
rModel.EndUndo();
}
void SvxTableController::SetVertical( sal_uInt16 nSId )
{
SdrTableObj* pTableObj = mxTableObj.get();
if( !mxTable.is() || !pTableObj )
if(!checkTableObject())
return;
TableModelNotifyGuard aGuard( mxTable.get() );
SdrTableObj& rTableObj(*mxTableObj.get());
SdrModel& rModel(rTableObj.getSdrModelFromSdrObject());
bool bUndo = mpModel && mpModel->IsUndoEnabled();
TableModelNotifyGuard aGuard( mxTable.get() );
const bool bUndo(rModel.IsUndoEnabled());
if (bUndo)
{
mpModel->BegUndo(ImpGetResStr(STR_TABLE_NUMFORMAT));
mpModel->AddUndo(mpModel->GetSdrUndoFactory().CreateUndoAttrObject(*pTableObj));
rModel.BegUndo(ImpGetResStr(STR_TABLE_NUMFORMAT));
rModel.AddUndo(rModel.GetSdrUndoFactory().CreateUndoAttrObject(rTableObj));
}
CellPos aStart, aEnd;
@@ -1208,7 +1219,7 @@
UpdateTableShape();
if (bUndo)
mpModel->EndUndo();
rModel.EndUndo();
}
void SvxTableController::MergeMarkedCells()
@@ -1219,7 +1230,7 @@
if( pTableObj )
{
if( pTableObj->IsTextEditActive() )
mpView->SdrEndTextEdit(true);
mrView.SdrEndTextEdit(true);
TableModelNotifyGuard aGuard( mxTable.get() );
MergeRange( aStart.mnCol, aStart.mnRow, aEnd.mnCol, aEnd.mnRow );
@@ -1228,102 +1239,102 @@
void SvxTableController::SplitMarkedCells()
{
if( mxTable.is() )
if(!checkTableObject() || !mxTable.is())
return;
SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
ScopedVclPtr< SvxAbstractSplitTableDialog > xDlg( pFact ? pFact->CreateSvxSplitTableDialog( nullptr, false, 99 ) : nullptr );
if( xDlg.get() && xDlg->Execute() )
{
const sal_Int32 nCount = xDlg->GetCount() - 1;
if( nCount < 1 )
return;
CellPos aStart, aEnd;
getSelectedCells( aStart, aEnd );
Reference< XMergeableCellRange > xRange( mxTable->createCursorByRange( mxTable->getCellRangeByPosition( aStart.mnCol, aStart.mnRow, aEnd.mnCol, aEnd.mnRow ) ), UNO_QUERY_THROW );
const sal_Int32 nRowCount = mxTable->getRowCount();
const sal_Int32 nColCount = mxTable->getColumnCount();
SdrTableObj& rTableObj(*mxTableObj.get());
SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
ScopedVclPtr< SvxAbstractSplitTableDialog > xDlg( pFact ? pFact->CreateSvxSplitTableDialog( nullptr, false, 99 ) : nullptr );
if( xDlg.get() && xDlg->Execute() )
if( rTableObj.IsTextEditActive() )
mrView.SdrEndTextEdit(true);
TableModelNotifyGuard aGuard( mxTable.get() );
SdrModel& rModel(rTableObj.getSdrModelFromSdrObject());
const bool bUndo(rModel.IsUndoEnabled());
if( bUndo )
{
const sal_Int32 nCount = xDlg->GetCount() - 1;
if( nCount < 1 )
return;
getSelectedCells( aStart, aEnd );
Reference< XMergeableCellRange > xRange( mxTable->createCursorByRange( mxTable->getCellRangeByPosition( aStart.mnCol, aStart.mnRow, aEnd.mnCol, aEnd.mnRow ) ), UNO_QUERY_THROW );
const sal_Int32 nRowCount = mxTable->getRowCount();
const sal_Int32 nColCount = mxTable->getColumnCount();
SdrTableObj* pTableObj = mxTableObj.get();
if( pTableObj )
{
if( pTableObj->IsTextEditActive() )
mpView->SdrEndTextEdit(true);
TableModelNotifyGuard aGuard( mxTable.get() );
const bool bUndo = mpModel && mpModel->IsUndoEnabled();
if( bUndo )
{
mpModel->BegUndo( ImpGetResStr(STR_TABLE_SPLIT) );
mpModel->AddUndo( mpModel->GetSdrUndoFactory().CreateUndoGeoObject(*pTableObj) );
}
if( xDlg->IsHorizontal() )
{
xRange->split( 0, nCount );
}
else
{
xRange->split( nCount, 0 );
}
if( bUndo )
mpModel->EndUndo();
}
aEnd.mnRow += mxTable->getRowCount() - nRowCount;
aEnd.mnCol += mxTable->getColumnCount() - nColCount;
setSelectedCells( aStart, aEnd );
rModel.BegUndo( ImpGetResStr(STR_TABLE_SPLIT) );
rModel.AddUndo(rModel.GetSdrUndoFactory().CreateUndoGeoObject(rTableObj));
}
if( xDlg->IsHorizontal() )
{
xRange->split( 0, nCount );
}
else
{
xRange->split( nCount, 0 );
}
if( bUndo )
rModel.EndUndo();
aEnd.mnRow += mxTable->getRowCount() - nRowCount;
aEnd.mnCol += mxTable->getColumnCount() - nColCount;
setSelectedCells( aStart, aEnd );
}
}
void SvxTableController::DistributeColumns()
{
SdrTableObj* pTableObj = mxTableObj.get();
if( pTableObj )
if(!checkTableObject())
return;
SdrTableObj& rTableObj(*mxTableObj.get());
SdrModel& rModel(rTableObj.getSdrModelFromSdrObject());
const bool bUndo(rModel.IsUndoEnabled());
if( bUndo )
{
const bool bUndo = mpModel && mpModel->IsUndoEnabled();
if( bUndo )
{
mpModel->BegUndo( ImpGetResStr(STR_TABLE_DISTRIBUTE_COLUMNS) );
mpModel->AddUndo( mpModel->GetSdrUndoFactory().CreateUndoGeoObject(*pTableObj) );
}
CellPos aStart, aEnd;
getSelectedCells( aStart, aEnd );
pTableObj->DistributeColumns( aStart.mnCol, aEnd.mnCol );
if( bUndo )
mpModel->EndUndo();
rModel.BegUndo( ImpGetResStr(STR_TABLE_DISTRIBUTE_COLUMNS) );
rModel.AddUndo(rModel.GetSdrUndoFactory().CreateUndoGeoObject(rTableObj));
}
CellPos aStart, aEnd;
getSelectedCells( aStart, aEnd );
rTableObj.DistributeColumns( aStart.mnCol, aEnd.mnCol );
if( bUndo )
rModel.EndUndo();
}
void SvxTableController::DistributeRows()
{
SdrTableObj* pTableObj = mxTableObj.get();
if( pTableObj )
if(!checkTableObject())
return;
SdrTableObj& rTableObj(*mxTableObj.get());
SdrModel& rModel(rTableObj.getSdrModelFromSdrObject());
const bool bUndo(rModel.IsUndoEnabled());
if( bUndo )
{
const bool bUndo = mpModel && mpModel->IsUndoEnabled();
if( bUndo )
{
mpModel->BegUndo( ImpGetResStr(STR_TABLE_DISTRIBUTE_ROWS) );
mpModel->AddUndo( mpModel->GetSdrUndoFactory().CreateUndoGeoObject(*pTableObj) );
}
CellPos aStart, aEnd;
getSelectedCells( aStart, aEnd );
pTableObj->DistributeRows( aStart.mnRow, aEnd.mnRow );
if( bUndo )
mpModel->EndUndo();
rModel.BegUndo( ImpGetResStr(STR_TABLE_DISTRIBUTE_ROWS) );
rModel.AddUndo(rModel.GetSdrUndoFactory().CreateUndoGeoObject(rTableObj));
}
CellPos aStart, aEnd;
getSelectedCells( aStart, aEnd );
rTableObj.DistributeRows( aStart.mnRow, aEnd.mnRow );
if( bUndo )
rModel.EndUndo();
}
bool SvxTableController::HasMarked()
@@ -1333,12 +1344,15 @@
bool SvxTableController::DeleteMarked()
{
if (!HasMarked())
if(!checkTableObject() || !HasMarked())
return false;
const bool bUndo = mpModel && mpModel->IsUndoEnabled();
SdrTableObj& rTableObj(*mxTableObj.get());
SdrModel& rModel(rTableObj.getSdrModelFromSdrObject());
const bool bUndo(rModel.IsUndoEnabled());
if (bUndo)
mpModel->BegUndo(ImpGetResStr(STR_TABLE_DELETE_CELL_CONTENTS));
rModel.BegUndo(ImpGetResStr(STR_TABLE_DELETE_CELL_CONTENTS));
CellPos aStart, aEnd;
getSelectedCells( aStart, aEnd );
@@ -1357,7 +1371,7 @@
}
if (bUndo)
mpModel->EndUndo();
rModel.EndUndo();
UpdateTableShape();
return true;
@@ -1444,8 +1458,7 @@
{
const bool bMod1 = rKEvt.GetKeyCode().IsMod1(); // ctrl
const bool bMod2 = rKEvt.GetKeyCode().IsMod2(); // Alt
const bool bTextEdit = mpView->IsTextEdit();
const bool bTextEdit = mrView.IsTextEdit();
TblAction nAction = TblAction::HandledByView;
@@ -1576,7 +1589,7 @@
}
bool bTextMove = false;
OutlinerView* pOLV = mpView->GetTextEditOutlinerView();
OutlinerView* pOLV = mrView.GetTextEditOutlinerView();
if( pOLV )
{
RemoveSelection();
@@ -1740,7 +1753,7 @@
void SvxTableController::gotoCell(const CellPos& rPos, bool bSelect, vcl::Window* pWindow, TblAction nAction /*= TblAction::NONE */)
{
if( mxTableObj.is() && mxTableObj->IsTextEditActive() )
mpView->SdrEndTextEdit(true);
mrView.SdrEndTextEdit(true);
if( bSelect )
{
@@ -1787,22 +1800,29 @@
void SvxTableController::MergeRange( sal_Int32 nFirstCol, sal_Int32 nFirstRow, sal_Int32 nLastCol, sal_Int32 nLastRow )
{
if( mxTable.is() ) try
if(!checkTableObject() || !mxTable.is())
return;
try
{
Reference< XMergeableCellRange > xRange( mxTable->createCursorByRange( mxTable->getCellRangeByPosition( nFirstCol, nFirstRow,nLastCol, nLastRow ) ), UNO_QUERY_THROW );
if( xRange->isMergeable() )
{
const bool bUndo = mpModel && mpModel->IsUndoEnabled();
SdrTableObj& rTableObj(*mxTableObj.get());
SdrModel& rModel(rTableObj.getSdrModelFromSdrObject());
const bool bUndo(rModel.IsUndoEnabled());
if( bUndo )
{
mpModel->BegUndo( ImpGetResStr(STR_TABLE_MERGE) );
mpModel->AddUndo( mpModel->GetSdrUndoFactory().CreateUndoGeoObject(*mxTableObj.get()) );
rModel.BegUndo( ImpGetResStr(STR_TABLE_MERGE) );
rModel.AddUndo(rModel.GetSdrUndoFactory().CreateUndoGeoObject(rTableObj));
}
xRange->merge();
if( bUndo )
mpModel->EndUndo();
rModel.EndUndo();
}
}
catch( Exception& )
@@ -1848,16 +1868,20 @@
void SvxTableController::EditCell(const CellPos& rPos, vcl::Window* pWindow, TblAction nAction /*= TblAction::NONE */)
{
SdrPageView* pPV = mpView->GetSdrPageView();
SdrPageView* pPV(mrView.GetSdrPageView());
sdr::table::SdrTableObj* pTableObj = mxTableObj.get();
if( pTableObj && pTableObj->GetPage() == pPV->GetPage() )
if(nullptr == pPV || !checkTableObject())
return;
SdrTableObj& rTableObj(*mxTableObj.get());
if(rTableObj.GetPage() == pPV->GetPage())
{
bool bEmptyOutliner = false;
if(!pTableObj->GetOutlinerParaObject() && mpView->GetTextEditOutliner())
if(!rTableObj.GetOutlinerParaObject() && mrView.GetTextEditOutliner())
{
::Outliner* pOutl = mpView->GetTextEditOutliner();
::Outliner* pOutl = mrView.GetTextEditOutliner();
sal_Int32 nParaCnt = pOutl->GetParagraphCount();
Paragraph* p1stPara = pOutl->GetParagraph( 0 );
@@ -1874,28 +1898,30 @@
CellPos aPos( rPos );
findMergeOrigin( aPos );
if( pTableObj != mpView->GetTextEditObject() || bEmptyOutliner || !pTableObj->IsTextEditActive( aPos ) )
if( &rTableObj != mrView.GetTextEditObject() || bEmptyOutliner || !rTableObj.IsTextEditActive( aPos ) )
{
if( pTableObj->IsTextEditActive() )
mpView->SdrEndTextEdit(true);
if( rTableObj.IsTextEditActive() )
mrView.SdrEndTextEdit(true);
pTableObj->setActiveCell( aPos );
rTableObj.setActiveCell( aPos );
// create new outliner, owner will be the SdrObjEditView
SdrOutliner* pOutl = mpModel ? SdrMakeOutliner(OutlinerMode::OutlineObject, *mpModel) : nullptr;
if (pOutl && pTableObj->IsVerticalWriting())
SdrModel& rModel(rTableObj.getSdrModelFromSdrObject());
SdrOutliner* pOutl(SdrMakeOutliner(OutlinerMode::OutlineObject, rModel));
if (pOutl && rTableObj.IsVerticalWriting())
pOutl->SetVertical( true );
if (mpView->SdrBeginTextEdit(pTableObj, pPV, pWindow, true, pOutl))
if (mrView.SdrBeginTextEdit(&rTableObj, pPV, pWindow, true, pOutl))
{
maCursorLastPos = maCursorFirstPos = rPos;
OutlinerView* pOLV = mpView->GetTextEditOutlinerView();
OutlinerView* pOLV = mrView.GetTextEditOutlinerView();
// Move cursor to end of text
ESelection aNewSelection;
const WritingMode eMode = pTableObj->GetWritingMode();
const WritingMode eMode = rTableObj.GetWritingMode();
if (((nAction == TblAction::GotoLeftCell) || (nAction == TblAction::GotoRightCell)) && (eMode != WritingMode_TB_RL))
{
const bool bLast = ((nAction == TblAction::GotoLeftCell) && (eMode == WritingMode_LR_TB)) ||
@@ -1913,11 +1939,11 @@
void SvxTableController::StopTextEdit()
{
if(mpView->IsTextEdit())
if(mrView.IsTextEdit())
{
mpView->SdrEndTextEdit();
mpView->SetCurrentObj(OBJ_TABLE);
mpView->SetEditMode(SdrViewEditMode::Edit);
mrView.SdrEndTextEdit();
mrView.SetCurrentObj(OBJ_TABLE);
mrView.SetEditMode(SdrViewEditMode::Edit);
}
}
@@ -1971,7 +1997,7 @@
}
while(bExt);
}
else if( mpView && mpView->IsTextEdit() )
else if(mrView.IsTextEdit())
{
rFirst = getSelectionStart();
findMergeOrigin( rFirst );
@@ -2010,7 +2036,7 @@
StopTextEdit();
mbCellSelectionMode = true;
maCursorLastPos = maCursorFirstPos = rPos;
mpView->MarkListHasChanged();
mrView.MarkListHasChanged();
}
@@ -2025,53 +2051,58 @@
bool SvxTableController::ChangeFontSize(bool bGrow, const FontList* pFontList)
{
if (mxTable.is())
if(!checkTableObject() || !mxTable.is())
return false;
SdrTableObj& rTableObj(*mxTableObj.get());
SdrModel& rModel(rTableObj.getSdrModelFromSdrObject());
if (mrView.IsTextEdit())
return true;
CellPos aStart, aEnd;
if(hasSelectedCells())
{
if (mpView->IsTextEdit())
return true;
getSelectedCells(aStart, aEnd);
}
else
{
aStart.mnRow = 0;
aStart.mnCol = 0;
aEnd.mnRow = mxTable->getRowCount() - 1;
aEnd.mnCol = mxTable->getColumnCount() - 1;
}
CellPos aStart, aEnd;
if(hasSelectedCells())
for (sal_Int32 nRow = aStart.mnRow; nRow <= aEnd.mnRow; nRow++)
{
for (sal_Int32 nCol = aStart.mnCol; nCol <= aEnd.mnCol; nCol++)
{
getSelectedCells(aStart, aEnd);
}
else
{
aStart.mnRow = 0;
aStart.mnCol = 0;
aEnd.mnRow = mxTable->getRowCount() - 1;
aEnd.mnCol = mxTable->getColumnCount() - 1;
}
for (sal_Int32 nRow = aStart.mnRow; nRow <= aEnd.mnRow; nRow++)
{
for (sal_Int32 nCol = aStart.mnCol; nCol <= aEnd.mnCol; nCol++)
CellRef xCell(dynamic_cast< Cell* >(mxTable->getCellByPosition(nCol, nRow).get()));
if (xCell.is())
{
CellRef xCell(dynamic_cast< Cell* >(mxTable->getCellByPosition(nCol, nRow).get()));
if (xCell.is())
{
if (mpModel && mpModel->IsUndoEnabled())
xCell->AddUndo();
if (rModel.IsUndoEnabled())
xCell->AddUndo();
SfxItemSet aCellSet(xCell->GetItemSet());
if (EditView::ChangeFontSize(bGrow, aCellSet, pFontList))
{
xCell->SetMergedItemSetAndBroadcast(aCellSet, false);
}
SfxItemSet aCellSet(xCell->GetItemSet());
if (EditView::ChangeFontSize(bGrow, aCellSet, pFontList))
{
xCell->SetMergedItemSetAndBroadcast(aCellSet, false);
}
}
}
UpdateTableShape();
return true;
}
return false;
UpdateTableShape();
return true;
}
void SvxTableController::UpdateSelection( const CellPos& rPos )
{
maCursorLastPos = rPos;
mpView->MarkListHasChanged();
mrView.MarkListHasChanged();
}
@@ -2099,7 +2130,7 @@
if( mbCellSelectionMode )
{
mbCellSelectionMode = false;
mpView->MarkListHasChanged();
mrView.MarkListHasChanged();
}
}
@@ -2136,14 +2167,14 @@
aRanges.push_back( a2DRange );
::Color aHighlight( COL_BLUE );
OutputDevice* pOutDev = mpView->GetFirstOutputDevice();
OutputDevice* pOutDev = mrView.GetFirstOutputDevice();
if( pOutDev )
aHighlight = pOutDev->GetSettings().GetStyleSettings().GetHighlightColor();
const sal_uInt32 nCount = mpView->PaintWindowCount();
const sal_uInt32 nCount = mrView.PaintWindowCount();
for( sal_uInt32 nIndex = 0; nIndex < nCount; nIndex++ )
{
SdrPaintWindow* pPaintWindow = mpView->GetPaintWindow(nIndex);
SdrPaintWindow* pPaintWindow = mrView.GetPaintWindow(nIndex);
if( pPaintWindow )
{
rtl::Reference < sdr::overlay::OverlayManager > xOverlayManager = pPaintWindow->GetOverlayManager();
@@ -2500,13 +2531,15 @@
void SvxTableController::SetAttrToSelectedCells(const SfxItemSet& rAttr, bool bReplaceAll)
{
if( !mxTable.is() )
if(!checkTableObject() || !mxTable.is())
return;
const bool bUndo = mpModel && mpModel->IsUndoEnabled();
SdrTableObj& rTableObj(*mxTableObj.get());
SdrModel& rModel(rTableObj.getSdrModelFromSdrObject());
const bool bUndo(rModel.IsUndoEnabled());
if( bUndo )
mpModel->BegUndo( ImpGetResStr(STR_TABLE_NUMFORMAT) );
rModel.BegUndo( ImpGetResStr(STR_TABLE_NUMFORMAT) );
CellPos aStart, aEnd;
getSelectedCells( aStart, aEnd );
@@ -2544,7 +2577,7 @@
UpdateTableShape();
if( bUndo )
mpModel->EndUndo();
rModel.EndUndo();
}
@@ -2554,9 +2587,9 @@
{
MergeAttrFromSelectedCells( rTargetSet, bOnlyHardAttr );
if( mpView->IsTextEdit() )
if( mrView.IsTextEdit() )
{
OutlinerView* pTextEditOutlinerView = mpView->GetTextEditOutlinerView();
OutlinerView* pTextEditOutlinerView = mrView.GetTextEditOutlinerView();
if(pTextEditOutlinerView)
{
// FALSE= consider InvalidItems not as the default, but as "holes"
@@ -2575,7 +2608,7 @@
bool SvxTableController::SetAttributes(const SfxItemSet& rSet, bool bReplaceAll)
{
if( mbCellSelectionMode || mpView->IsTextEdit() )
if( mbCellSelectionMode || mrView.IsTextEdit() )
{
SetAttrToSelectedCells( rSet, bReplaceAll );
return true;
@@ -2588,16 +2621,17 @@
{
if( mxTableObj.is() && mbCellSelectionMode && pNewPage ) try
{
sdr::table::SdrTableObj& rTableObj = *mxTableObj.get();
sdr::table::SdrTableObj& rTableObj(*mxTableObj.get());
CellPos aStart, aEnd;
getSelectedCells( aStart, aEnd );
getSelectedCells(aStart, aEnd);
SdrTableObj* pNewTableObj = rTableObj.CloneRange( aStart, aEnd );
pNewTableObj->SetPage( pNewPage );
pNewTableObj->SetModel( pNewPage->GetModel() );
// Clone to new SdrModel
SdrTableObj* pNewTableObj(
rTableObj.CloneRange(
aStart,
aEnd,
pNewPage->getSdrModelFromSdrPage()));
pNewTableObj->SetPage(pNewPage);
pNewPage->InsertObject(pNewTableObj, SAL_MAX_SIZE);
return true;
@@ -2606,13 +2640,14 @@
{
OSL_FAIL( "svx::SvxTableController::GetMarkedObjModel(), exception caught!" );
}
return false;
}
bool SvxTableController::PasteObjModel( const SdrModel& rModel )
{
if( mxTableObj.is() && mpView && (rModel.GetPageCount() >= 1) )
if( mxTableObj.is() && (rModel.GetPageCount() >= 1) )
{
const SdrPage* pPastePage = rModel.GetPage(0);
if( pPastePage && pPastePage->GetObjCount() == 1 )
@@ -2647,8 +2682,8 @@
CellPos aStart, aEnd;
getSelectedCells( aStart, aEnd );
if( mpView->IsTextEdit() )
mpView->SdrEndTextEdit(true);
if( mrView.IsTextEdit() )
mrView.SdrEndTextEdit(true);
sal_Int32 nColumns = mxTable->getColumnCount();
sal_Int32 nRows = mxTable->getRowCount();
@@ -2692,51 +2727,51 @@
bool SvxTableController::ApplyFormatPaintBrush( SfxItemSet& rFormatSet, bool bNoCharacterFormats, bool bNoParagraphFormats )
{
if( mbCellSelectionMode )
if(!mbCellSelectionMode)
{
SdrTextObj* pTableObj = dynamic_cast<SdrTextObj*>( mxTableObj.get() );
if( !pTableObj )
return false;
return false;
}
const bool bUndo = mpModel && mpModel->IsUndoEnabled();
if(!checkTableObject())
return false;
if( bUndo )
mpModel->BegUndo( ImpGetResStr(STR_TABLE_NUMFORMAT) );
SdrTableObj& rTableObj(*mxTableObj.get());
SdrModel& rModel(rTableObj.getSdrModelFromSdrObject());
const bool bUndo(rModel.IsUndoEnabled());
CellPos aStart, aEnd;
getSelectedCells( aStart, aEnd );
if( bUndo )
rModel.BegUndo(ImpGetResStr(STR_TABLE_NUMFORMAT));
const bool bFrame = (rFormatSet.GetItemState( SDRATTR_TABLE_BORDER ) == SfxItemState::SET) || (rFormatSet.GetItemState( SDRATTR_TABLE_BORDER_INNER ) == SfxItemState::SET);
CellPos aStart, aEnd;
getSelectedCells( aStart, aEnd );
const bool bFrame = (rFormatSet.GetItemState( SDRATTR_TABLE_BORDER ) == SfxItemState::SET) || (rFormatSet.GetItemState( SDRATTR_TABLE_BORDER_INNER ) == SfxItemState::SET);
for( sal_Int32 nRow = aStart.mnRow; nRow <= aEnd.mnRow; nRow++ )
for( sal_Int32 nRow = aStart.mnRow; nRow <= aEnd.mnRow; nRow++ )
{
for( sal_Int32 nCol = aStart.mnCol; nCol <= aEnd.mnCol; nCol++ )
{
for( sal_Int32 nCol = aStart.mnCol; nCol <= aEnd.mnCol; nCol++ )
CellRef xCell( dynamic_cast< Cell* >( mxTable->getCellByPosition( nCol, nRow ).get() ) );
if( xCell.is() )
{
CellRef xCell( dynamic_cast< Cell* >( mxTable->getCellByPosition( nCol, nRow ).get() ) );
if( xCell.is() )
{
if (bUndo)
xCell->AddUndo();
SdrText* pText = static_cast< SdrText* >( xCell.get() );
SdrObjEditView::ApplyFormatPaintBrushToText( rFormatSet, *pTableObj, pText, bNoCharacterFormats, bNoParagraphFormats );
}
if (bUndo)
xCell->AddUndo();
SdrText* pText = static_cast< SdrText* >( xCell.get() );
SdrObjEditView::ApplyFormatPaintBrushToText( rFormatSet, rTableObj, pText, bNoCharacterFormats, bNoParagraphFormats );
}
}
if( bFrame )
{
ApplyBorderAttr( rFormatSet );
}
UpdateTableShape();
if( bUndo )
mpModel->EndUndo();
return true;
}
return false;
if( bFrame )
{
ApplyBorderAttr( rFormatSet );
}
UpdateTableShape();
if( bUndo )
rModel.EndUndo();
return true;
}
@@ -3077,26 +3112,22 @@
bool SvxTableController::isRowHeader()
{
SdrTableObj* pTableObj = mxTableObj.get();
SdrModel* pModel = pTableObj ? pTableObj->GetModel() : nullptr;
if( !pTableObj || !pModel )
if(!checkTableObject())
return false;
TableStyleSettings aSettings( pTableObj->getTableStyleSettings() );
SdrTableObj& rTableObj(*mxTableObj.get());
TableStyleSettings aSettings(rTableObj.getTableStyleSettings());
return aSettings.mbUseFirstRow;
}
bool SvxTableController::isColumnHeader()
{
SdrTableObj* pTableObj = mxTableObj.get();
SdrModel* pModel = pTableObj ? pTableObj->GetModel() : nullptr;
if( !pTableObj || !pModel )
if(!checkTableObject())
return false;
TableStyleSettings aSettings( pTableObj->getTableStyleSettings() );
SdrTableObj& rTableObj(*mxTableObj.get());
TableStyleSettings aSettings(rTableObj.getTableStyleSettings());
return aSettings.mbUseFirstColumn;
}
@@ -3125,7 +3156,7 @@
// No selection, but rPosition is at an other cell: start table selection.
StartSelection(maMouseDownPos);
// Update graphic selection, should be hidden now.
mpView->AdjustMarkHdl();
mrView.AdjustMarkHdl();
}
}
diff --git a/svx/source/table/tablemodel.cxx b/svx/source/table/tablemodel.cxx
index 033af24..812e3de7 100644
--- a/svx/source/table/tablemodel.cxx
+++ b/svx/source/table/tablemodel.cxx
@@ -554,7 +554,7 @@
void TableModel::notifyModification()
{
::osl::MutexGuard guard( m_aMutex );
if( (mnNotifyLock == 0) && mpTableObj && mpTableObj->GetModel() )
if( (mnNotifyLock == 0) && mpTableObj )
{
mbNotifyPending = false;
@@ -602,8 +602,7 @@
{
try
{
SdrModel* pModel = mpTableObj->GetModel();
SdrModel& rModel(mpTableObj->getSdrModelFromSdrObject());
TableModelNotifyGuard aGuard( this );
nIndex = insert_range<ColumnVector,ColumnVector::iterator,TableColumnRef>( maColumns, nIndex, nCount );
@@ -619,11 +618,12 @@
aNewColumns[nOffset] = xNewCol;
}
const bool bUndo = pModel && mpTableObj->IsInserted() && pModel->IsUndoEnabled();
const bool bUndo(mpTableObj->IsInserted() && rModel.IsUndoEnabled());
if( bUndo )
{
pModel->BegUndo( ImpGetResStr(STR_TABLE_INSCOL) );
pModel->AddUndo( pModel->GetSdrUndoFactory().CreateUndoGeoObject(*mpTableObj) );
rModel.BegUndo( ImpGetResStr(STR_TABLE_INSCOL) );
rModel.AddUndo( rModel.GetSdrUndoFactory().CreateUndoGeoObject(*mpTableObj) );
TableModelRef xThis( this );
@@ -638,7 +638,7 @@
(*aCellIter++) = getCell( nIndex + nOffset, nRow );
}
pModel->AddUndo( new InsertColUndo( xThis, nIndex, aNewColumns, aNewCells ) );
rModel.AddUndo( new InsertColUndo( xThis, nIndex, aNewColumns, aNewCells ) );
}
const sal_Int32 nRowCount = getRowCountImpl();
@@ -660,11 +660,9 @@
}
if( bUndo )
pModel->EndUndo();
rModel.EndUndo();
if( pModel )
pModel->SetChanged();
rModel.SetChanged();
}
catch( Exception& )
{
@@ -691,14 +689,13 @@
nCount = nColCount - nIndex;
sal_Int32 nRows = getRowCountImpl();
SdrModel& rModel(mpTableObj->getSdrModelFromSdrObject());
const bool bUndo(mpTableObj->IsInserted() && rModel.IsUndoEnabled());
SdrModel* pModel = mpTableObj->GetModel();
const bool bUndo = pModel && mpTableObj->IsInserted() && pModel->IsUndoEnabled();
if( bUndo )
{
pModel->BegUndo( ImpGetResStr(STR_UNDO_COL_DELETE) );
pModel->AddUndo( pModel->GetSdrUndoFactory().CreateUndoGeoObject(*mpTableObj) );
rModel.BegUndo( ImpGetResStr(STR_UNDO_COL_DELETE) );
rModel.AddUndo( rModel.GetSdrUndoFactory().CreateUndoGeoObject(*mpTableObj) );
TableModelRef xThis( this );
ColumnVector aRemovedCols( nCount );
@@ -716,7 +713,7 @@
(*aCellIter++) = getCell( nIndex + nOffset, nRow );
}
pModel->AddUndo( new RemoveColUndo( xThis, nIndex, aRemovedCols, aRemovedCells ) );
rModel.AddUndo( new RemoveColUndo( xThis, nIndex, aRemovedCols, aRemovedCells ) );
}
// only rows before and inside the removed rows are considered
@@ -769,10 +766,9 @@
maRows[nRows]->removeColumns( nIndex, nCount );
if( bUndo )
pModel->EndUndo();
rModel.EndUndo();
if( pModel )
pModel->SetChanged();
rModel.SetChanged();
}
catch( Exception& )
{
@@ -789,8 +785,9 @@
{
if( nCount && mpTableObj )
{
SdrModel* pModel = mpTableObj->GetModel();
const bool bUndo = pModel && mpTableObj->IsInserted() && pModel->IsUndoEnabled();
SdrModel& rModel(mpTableObj->getSdrModelFromSdrObject());
const bool bUndo(mpTableObj->IsInserted() && rModel.IsUndoEnabled());
try
{
TableModelNotifyGuard aGuard( this );
@@ -808,10 +805,10 @@
if( bUndo )
{
pModel->BegUndo( ImpGetResStr(STR_TABLE_INSROW) );
pModel->AddUndo( pModel->GetSdrUndoFactory().CreateUndoGeoObject(*mpTableObj) );
rModel.BegUndo( ImpGetResStr(STR_TABLE_INSROW) );
rModel.AddUndo( rModel.GetSdrUndoFactory().CreateUndoGeoObject(*mpTableObj) );
TableModelRef xThis( this );
pModel->AddUndo( new InsertRowUndo( xThis, nIndex, aNewRows ) );
rModel.AddUndo( new InsertRowUndo( xThis, nIndex, aNewRows ) );
}
// check if cells merge over new columns
@@ -836,10 +833,9 @@
OSL_FAIL("sdr::table::TableModel::insertRows(), exception caught!");
}
if( bUndo )
pModel->EndUndo();
rModel.EndUndo();
if( pModel )
pModel->SetChanged();
rModel.SetChanged();
updateRows();
setModified(true);
@@ -853,8 +849,8 @@
if( mpTableObj && nCount && (nIndex >= 0) && (nIndex < nRowCount) )
{
SdrModel* pModel = mpTableObj->GetModel();
const bool bUndo = pModel && mpTableObj->IsInserted()&& pModel->IsUndoEnabled();
SdrModel& rModel(mpTableObj->getSdrModelFromSdrObject());
const bool bUndo(mpTableObj->IsInserted() && rModel.IsUndoEnabled());
try
{
@@ -866,8 +862,8 @@
if( bUndo )
{
pModel->BegUndo( ImpGetResStr(STR_UNDO_ROW_DELETE) );
pModel->AddUndo( pModel->GetSdrUndoFactory().CreateUndoGeoObject(*mpTableObj) );
rModel.BegUndo( ImpGetResStr(STR_UNDO_ROW_DELETE) );
rModel.AddUndo( rModel.GetSdrUndoFactory().CreateUndoGeoObject(*mpTableObj) );
TableModelRef xThis( this );
@@ -875,7 +871,7 @@
for( sal_Int32 nOffset = 0; nOffset < nCount; ++nOffset )
aRemovedRows[nOffset] = maRows[nIndex+nOffset];
pModel->AddUndo( new RemoveRowUndo( xThis, nIndex, aRemovedRows ) );
rModel.AddUndo( new RemoveRowUndo( xThis, nIndex, aRemovedRows ) );
}
// only rows before and inside the removed rows are considered
@@ -926,10 +922,9 @@
remove_range<RowVector,RowVector::iterator>( maRows, nIndex, nCount );
if( bUndo )
pModel->EndUndo();
rModel.EndUndo();
if( pModel )
pModel->SetChanged();
rModel.SetChanged();
}
catch( Exception& )
{
@@ -1050,10 +1045,11 @@
void TableModel::merge( sal_Int32 nCol, sal_Int32 nRow, sal_Int32 nColSpan, sal_Int32 nRowSpan )
{
SdrModel* pModel = mpTableObj->GetModel();
if(nullptr == mpTableObj)
return;
const bool bUndo = pModel && mpTableObj->IsInserted() && pModel->IsUndoEnabled();
SdrModel& rModel(mpTableObj->getSdrModelFromSdrObject());
const bool bUndo(mpTableObj->IsInserted() && rModel.IsUndoEnabled());
const sal_Int32 nLastRow = nRow + nRowSpan;
const sal_Int32 nLastCol = nCol + nColSpan;
diff --git a/svx/source/table/tablerow.cxx b/svx/source/table/tablerow.cxx
index 43010ad..cf765b4 100644
--- a/svx/source/table/tablerow.cxx
+++ b/svx/source/table/tablerow.cxx
@@ -206,14 +206,15 @@
void SAL_CALL TableRow::setFastPropertyValue( sal_Int32 nHandle, const Any& aValue )
{
bool bOk = false;
bool bChange = false;
if(!mxTableModel.is() || nullptr == mxTableModel->getSdrTableObj())
return;
TableRowUndo* pUndo = nullptr;
SdrModel* pModel = mxTableModel->getSdrTableObj()->GetModel();
const bool bUndo = mxTableModel.is() && mxTableModel->getSdrTableObj() && mxTableModel->getSdrTableObj()->IsInserted() && pModel && pModel->IsUndoEnabled();
SdrTableObj& rTableObj(*mxTableModel->getSdrTableObj());
SdrModel& rModel(rTableObj.getSdrModelFromSdrObject());
bool bOk(false);
bool bChange(false);
TableRowUndo* pUndo(nullptr);
const bool bUndo(rTableObj.IsInserted() && rModel.IsUndoEnabled());
if( bUndo )
{
@@ -276,6 +277,7 @@
delete pUndo;
throw UnknownPropertyException( OUString::number(nHandle), static_cast<cppu::OWeakObject*>(this));
}
if( !bOk )
{
delete pUndo;
@@ -286,7 +288,7 @@
{
if( pUndo )
{
pModel->AddUndo( pUndo );
rModel.AddUndo( pUndo );
pUndo = nullptr;
}
mxTableModel->setModified(true);
diff --git a/svx/source/table/tablertfimporter.cxx b/svx/source/table/tablertfimporter.cxx
index 714e0c6..b50efb3 100644
--- a/svx/source/table/tablertfimporter.cxx
+++ b/svx/source/table/tablertfimporter.cxx
@@ -132,8 +132,8 @@
SdrTableRTFParser::SdrTableRTFParser( SdrTableObj& rTableObj )
: mrTableObj( rTableObj )
, mpOutliner( SdrMakeOutliner( OutlinerMode::TextObject, *rTableObj.GetModel() ) )
, mrItemPool( rTableObj.GetModel()->GetItemPool() )
, mpOutliner( SdrMakeOutliner( OutlinerMode::TextObject, rTableObj.getSdrModelFromSdrObject() ) )
, mrItemPool( rTableObj.getSdrModelFromSdrObject().GetItemPool() )
, mnLastToken( 0 )
, mbNewDef( false )
, mnStartPara( 0 )
diff --git a/svx/source/table/tableundo.cxx b/svx/source/table/tableundo.cxx
index 9a14948..493c895 100644
--- a/svx/source/table/tableundo.cxx
+++ b/svx/source/table/tableundo.cxx
@@ -35,10 +35,10 @@
namespace sdr { namespace table {
CellUndo::CellUndo( const tools::WeakReference<SdrObject>& xObjRef, const CellRef& xCell )
: SdrUndoAction( *xCell->GetModel() )
, mxObjRef( xObjRef )
, mxCell( xCell )
, mbUndo( true )
: SdrUndoAction(xCell->GetObject().getSdrModelFromSdrObject())
,mxObjRef( xObjRef )
,mxCell( xCell )
,mbUndo( true )
{
if( mxCell.is() && mxObjRef.is() )
{
@@ -162,10 +162,10 @@
InsertRowUndo::InsertRowUndo( const TableModelRef& xTable, sal_Int32 nIndex, RowVector& aNewRows )
: SdrUndoAction( *xTable->getSdrTableObj()->GetModel() )
, mxTable( xTable )
, mnIndex( nIndex )
, mbUndo( true )
: SdrUndoAction(xTable->getSdrTableObj()->getSdrModelFromSdrObject())
,mxTable( xTable )
,mnIndex( nIndex )
,mbUndo( true )
{
maRows.swap( aNewRows );
}
@@ -202,10 +202,10 @@
RemoveRowUndo::RemoveRowUndo( const TableModelRef& xTable, sal_Int32 nIndex, RowVector& aRemovedRows )
: SdrUndoAction( *xTable->getSdrTableObj()->GetModel() )
, mxTable( xTable )
, mnIndex( nIndex )
, mbUndo( true )
: SdrUndoAction(xTable->getSdrTableObj()->getSdrModelFromSdrObject())
,mxTable( xTable )
,mnIndex( nIndex )
,mbUndo( true )
{
maRows.swap( aRemovedRows );
}
@@ -258,10 +258,10 @@
InsertColUndo::InsertColUndo( const TableModelRef& xTable, sal_Int32 nIndex, ColumnVector& aNewCols, CellVector& aCells )
: SdrUndoAction( *xTable->getSdrTableObj()->GetModel() )
, mxTable( xTable )
, mnIndex( nIndex )
, mbUndo( true )
: SdrUndoAction(xTable->getSdrTableObj()->getSdrModelFromSdrObject())
,mxTable( xTable )
,mnIndex( nIndex )
,mbUndo( true )
{
maColumns.swap( aNewCols );
maCells.swap( aCells );
@@ -302,10 +302,10 @@
RemoveColUndo::RemoveColUndo( const TableModelRef& xTable, sal_Int32 nIndex, ColumnVector& aNewCols, CellVector& aCells )
: SdrUndoAction( *xTable->getSdrTableObj()->GetModel() )
, mxTable( xTable )
, mnIndex( nIndex )
, mbUndo( true )
: SdrUndoAction(xTable->getSdrTableObj()->getSdrModelFromSdrObject())
,mxTable( xTable )
,mnIndex( nIndex )
,mbUndo( true )
{
maColumns.swap( aNewCols );
maCells.swap( aCells );
@@ -346,9 +346,9 @@
TableColumnUndo::TableColumnUndo( const TableColumnRef& xCol )
: SdrUndoAction( *xCol->mxTableModel->getSdrTableObj()->GetModel() )
, mxCol( xCol )
, mbHasRedoData( false )
: SdrUndoAction(xCol->mxTableModel->getSdrTableObj()->getSdrModelFromSdrObject())
,mxCol( xCol )
,mbHasRedoData( false )
{
getData( maUndoData );
}
@@ -412,7 +412,7 @@
TableRowUndo::TableRowUndo( const TableRowRef& xRow )
: SdrUndoAction( *xRow->mxTableModel->getSdrTableObj()->GetModel() )
: SdrUndoAction(xRow->mxTableModel->getSdrTableObj()->getSdrModelFromSdrObject())
, mxRow( xRow )
, mbHasRedoData( false )
{
@@ -475,9 +475,9 @@
TableStyleUndo::TableStyleUndo( const SdrTableObj& rTableObj )
: SdrUndoAction( *rTableObj.GetModel() )
, mxObjRef( const_cast< sdr::table::SdrTableObj*>( &rTableObj ) )
, mbHasRedoData(false)
: SdrUndoAction(rTableObj.getSdrModelFromSdrObject())
,mxObjRef( const_cast< sdr::table::SdrTableObj*>( &rTableObj ) )
,mbHasRedoData(false)
{
getData( maUndoData );
}
diff --git a/svx/source/tbxctrls/fontworkgallery.cxx b/svx/source/tbxctrls/fontworkgallery.cxx
index cca40d2..1dadd49 100644
--- a/svx/source/tbxctrls/fontworkgallery.cxx
+++ b/svx/source/tbxctrls/fontworkgallery.cxx
@@ -197,7 +197,8 @@
SdrPage* pPage = pModel->GetPage(0);
if( pPage && pPage->GetObjCount() )
{
SdrObject* pNewObject = pPage->GetObj(0)->Clone();
// Clone directly to target SdrModel
SdrObject* pNewObject(pPage->GetObj(0)->Clone(mpDestModel));
// center shape on current view
OutputDevice* pOutDev = mpSdrView->GetFirstOutputDevice();
@@ -210,16 +211,15 @@
aPagePos.AdjustY( -(aObjRect.GetHeight() / 2) );
tools::Rectangle aNewObjectRectangle(aPagePos, aObjRect.GetSize());
SdrPageView* pPV = mpSdrView->GetSdrPageView();
pNewObject->SetLogicRect(aNewObjectRectangle);
if ( mppSdrObject )
{
*mppSdrObject = pNewObject;
(*mppSdrObject)->SetModel( mpDestModel );
}
else if( pPV )
{
mpSdrView->InsertObjectAtView( pNewObject, *pPV );
mpSdrView->InsertObjectAtView( pNewObject, *pPV );
}
}
}
diff --git a/svx/source/unodraw/UnoGraphicExporter.cxx b/svx/source/unodraw/UnoGraphicExporter.cxx
index 9fb0d02..a70c99a 100644
--- a/svx/source/unodraw/UnoGraphicExporter.cxx
+++ b/svx/source/unodraw/UnoGraphicExporter.cxx
@@ -108,24 +108,21 @@
Fraction maScaleX;
Fraction maScaleY;
explicit ExportSettings( SdrModel const * pDoc );
explicit ExportSettings(const SdrModel& rSdrModel);
};
ExportSettings::ExportSettings( SdrModel const * pDoc )
: mnWidth( 0 )
, mnHeight( 0 )
, mbExportOnlyBackground( false )
, mbScrollText( false )
, mbUseHighContrast( false )
, mbTranslucent( false )
, maScaleX( 1, 1 )
, maScaleY( 1, 1 )
ExportSettings::ExportSettings(const SdrModel& rSdrModel)
: mnWidth( 0 )
,mnHeight( 0 )
,mbExportOnlyBackground( false )
,mbScrollText( false )
,mbUseHighContrast( false )
,mbTranslucent( false )
,maScaleX( 1, 1 )
,maScaleY( 1, 1 )
{
if( pDoc )
{
maScaleX = pDoc->GetScaleFraction();
maScaleY = pDoc->GetScaleFraction();
}
maScaleX = rSdrModel.GetScaleFraction();
maScaleY = rSdrModel.GetScaleFraction();
}
/** implements a component to export shapes or pages to external graphic formats.
@@ -421,13 +418,15 @@
if(bSuccess)
{
std::unique_ptr<SdrView> pView(new SdrView(mpDoc, pVDev));
std::unique_ptr<SdrView> pView(new SdrView(*mpDoc, pVDev));
pView->SetPageVisible( false );
pView->SetBordVisible( false );
pView->SetGridVisible( false );
pView->SetHlplVisible( false );
pView->SetGlueVisible( false );
pView->ShowSdrPage(pPage);
vcl::Region aRegion (tools::Rectangle( aPoint, aPageSize ) );
ImplExportCheckVisisbilityRedirector aRedirector( mpCurrentPage );
@@ -631,7 +630,9 @@
if(pCorrectProperties)
{
pTempBackgroundShape = new SdrRectObj(tools::Rectangle(Point(0,0), pPage->GetSize()));
pTempBackgroundShape = new SdrRectObj(
*mpDoc,
tools::Rectangle(Point(0,0), pPage->GetSize()));
pTempBackgroundShape->SetMergedItemSet(pCorrectProperties->GetItemSet());
pTempBackgroundShape->SetMergedItem(XLineStyleItem(drawing::LineStyle_NONE));
pTempBackgroundShape->NbcSetStyleSheet(pCorrectProperties->GetStyleSheet(), true);
@@ -683,13 +684,14 @@
}
std::unique_ptr<SdrView> xLocalView;
if (FmFormModel* pFormModel = dynamic_cast<FmFormModel*>(mpDoc))
{
xLocalView.reset(new FmFormView(pFormModel, aVDev) );
xLocalView.reset(new FmFormView(*pFormModel, aVDev));
}
else
{
xLocalView.reset(new SdrView(mpDoc, aVDev));
xLocalView.reset(new SdrView(*mpDoc, aVDev));
}
ScopedVclPtr<VirtualDevice> pVDev(CreatePageVDev( pPage, nWidthPix, nHeightPix ));
@@ -715,13 +717,14 @@
// create a view
std::unique_ptr< SdrView > pView;
if (FmFormModel *pFormModel = dynamic_cast<FmFormModel*>(mpDoc))
{
pView.reset(new FmFormView(pFormModel, aVDev));
pView.reset(new FmFormView(*pFormModel, aVDev));
}
else
{
pView.reset(new SdrView( mpDoc, aVDev ));
pView.reset(new SdrView(*mpDoc, aVDev));
}
pView->SetBordVisible( false );
@@ -997,8 +1000,8 @@
GraphicFilter &rFilter = GraphicFilter::GetGraphicFilter();
// get the arguments from the descriptor
ExportSettings aSettings( mpDoc );
ParseSettings( aDescriptor, aSettings );
ExportSettings aSettings(*mpDoc);
ParseSettings(aDescriptor, aSettings);
const sal_uInt16 nFilter = !aSettings.maMediaType.isEmpty()
? rFilter.GetExportFormatNumberForMediaType( aSettings.maMediaType )
@@ -1136,7 +1139,7 @@
if( nullptr == mpUnoPage || nullptr == mpUnoPage->GetSdrPage() )
break;
mpDoc = mpUnoPage->GetSdrPage()->GetModel();
mpDoc = &mpUnoPage->GetSdrPage()->getSdrModelFromSdrPage();
// Step 4: If we got a generic XShapes test all contained shapes
// if they belong to the same XDrawPage
@@ -1246,7 +1249,7 @@
rtl::Reference< GraphicExporter > xExporter( new GraphicExporter() );
Reference< XComponent > xComp( rShape.getUnoShape(), UNO_QUERY_THROW );
xExporter->setSourceDocument( xComp );
ExportSettings aSettings( rShape.GetModel() );
ExportSettings aSettings(rShape.getSdrModelFromSdrObject());
xExporter->GetGraphic( aSettings, aGraphic, true/*bVector*/ );
}
catch( Exception& )
diff --git a/svx/source/unodraw/tableshape.cxx b/svx/source/unodraw/tableshape.cxx
index a348156..281dfa2 100644
--- a/svx/source/unodraw/tableshape.cxx
+++ b/svx/source/unodraw/tableshape.cxx
@@ -59,8 +59,8 @@
if( !(rValue >>= xTemplate) )
throw IllegalArgumentException();
if( mpObj.is() )
static_cast< sdr::table::SdrTableObj* >( mpObj.get() )->setTableStyle(xTemplate);
if( HasSdrObject() )
static_cast< sdr::table::SdrTableObj* >( GetSdrObject() )->setTableStyle(xTemplate);
return true;
}
@@ -71,9 +71,9 @@
case OWN_ATTR_TABLETEMPLATE_BANDINGROWS:
case OWN_ATTR_TABLETEMPLATE_BANDINGCOULUMNS:
{
if( mpObj.is() )
if( HasSdrObject() )
{
TableStyleSettings aSettings( static_cast< sdr::table::SdrTableObj* >( mpObj.get() )->getTableStyleSettings() );
TableStyleSettings aSettings( static_cast< sdr::table::SdrTableObj* >( GetSdrObject() )->getTableStyleSettings() );
switch( pProperty->nWID )
{
@@ -85,7 +85,7 @@
case OWN_ATTR_TABLETEMPLATE_BANDINGCOULUMNS: rValue >>= aSettings.mbUseColumnBanding; break;
}
static_cast< sdr::table::SdrTableObj* >( mpObj.get() )->setTableStyleSettings(aSettings);
static_cast< sdr::table::SdrTableObj* >( GetSdrObject() )->setTableStyleSettings(aSettings);
}
return true;
@@ -106,25 +106,25 @@
{
case OWN_ATTR_OLEMODEL:
{
if( mpObj.is() )
if( HasSdrObject() )
{
rValue <<= static_cast< sdr::table::SdrTableObj* >( mpObj.get() )->getTable();
rValue <<= static_cast< sdr::table::SdrTableObj* >( GetSdrObject() )->getTable();
}
return true;
}
case OWN_ATTR_TABLETEMPLATE:
{
if( mpObj.is() )
if( HasSdrObject() )
{
rValue <<= static_cast< sdr::table::SdrTableObj* >( mpObj.get() )->getTableStyle();
rValue <<= static_cast< sdr::table::SdrTableObj* >( GetSdrObject() )->getTableStyle();
}
return true;
}
case OWN_ATTR_BITMAP:
{
if( mpObj.is() )
if( HasSdrObject() )
{
Graphic aGraphic( SvxGetGraphicForShape( *mpObj.get() ) );
Graphic aGraphic( SvxGetGraphicForShape( *GetSdrObject() ) );
rValue <<= aGraphic.GetXGraphic();
}
return true;
@@ -136,9 +136,9 @@
case OWN_ATTR_TABLETEMPLATE_BANDINGROWS:
case OWN_ATTR_TABLETEMPLATE_BANDINGCOULUMNS:
{
if( mpObj.is() )
if( HasSdrObject() )
{
TableStyleSettings aSettings( static_cast< sdr::table::SdrTableObj* >( mpObj.get() )->getTableStyleSettings() );
TableStyleSettings aSettings( static_cast< sdr::table::SdrTableObj* >( GetSdrObject() )->getTableStyleSettings() );
switch( pProperty->nWID )
{
@@ -163,14 +163,14 @@
void SvxTableShape::lock()
{
SvxShape::lock();
if( mpObj.is() )
static_cast< sdr::table::SdrTableObj* >( mpObj.get() )->uno_lock();
if( HasSdrObject() )
static_cast< sdr::table::SdrTableObj* >( GetSdrObject() )->uno_lock();
}
void SvxTableShape::unlock()
{
if( mpObj.is() )
static_cast< sdr::table::SdrTableObj* >( mpObj.get() )->uno_unlock();
if( HasSdrObject() )
static_cast< sdr::table::SdrTableObj* >( GetSdrObject() )->uno_unlock();
SvxShape::unlock();
}
diff --git a/svx/source/unodraw/unomod.cxx b/svx/source/unodraw/unomod.cxx
index 4f0ea1f..dd1d131 100644
--- a/svx/source/unodraw/unomod.cxx
+++ b/svx/source/unodraw/unomod.cxx
@@ -246,8 +246,26 @@
return aSeq;
}
SvxUnoDrawingModel::SvxUnoDrawingModel( SdrModel* pDoc ) throw()
: SfxBaseModel(nullptr), mpDoc( pDoc )
SdrModel* SvxUnoDrawingModel::getSdrModelFromUnoModel() const
{
return mpDoc;
}
SvxUnoDrawingModel::SvxUnoDrawingModel(SdrModel* pDoc) throw()
: SfxBaseModel(nullptr),
SvxFmMSFactory(),
css::drawing::XDrawPagesSupplier(),
css::lang::XServiceInfo(),
css::ucb::XAnyCompareFactory(),
mpDoc(pDoc),
mxDrawPagesAccess(),
mxDashTable(),
mxGradientTable(),
mxHatchTable(),
mxBitmapTable(),
mxTransGradientTable(),
mxMarkerTable(),
maTypeSequence()
{
}
diff --git a/svx/source/unodraw/unopage.cxx b/svx/source/unodraw/unopage.cxx
index d7f14d3..3dc69e8 100644
--- a/svx/source/unodraw/unopage.cxx
+++ b/svx/source/unodraw/unopage.cxx
@@ -61,12 +61,11 @@
UNO3_GETIMPLEMENTATION_IMPL( SvxDrawPage );
SvxDrawPage::SvxDrawPage(SdrPage* pInPage)
: mrBHelper(getMutex())
, mpPage(pInPage)
, mpModel(mpPage->GetModel()) // register at broadcaster
, mpView(new SdrView(mpModel)) // create (hidden) view
SvxDrawPage::SvxDrawPage(SdrPage* pInPage) // TTTT should be reference
: mrBHelper(getMutex())
,mpPage(pInPage)
,mpModel(&pInPage->getSdrModelFromSdrPage()) // register at broadcaster
,mpView(new SdrView(pInPage->getSdrModelFromSdrPage())) // create (hidden) view
{
mpView->SetDesignMode();
}
@@ -192,6 +191,24 @@
return;
SdrObject *pObj = pShape->GetSdrObject();
bool bNeededToClone(false);
if(nullptr != pObj && &pObj->getSdrModelFromSdrObject() != &mpPage->getSdrModelFromSdrPage())
{
// TTTT UNO API tries to add an existing SvxShape to this SvxDrawPage,
// but these use different SdrModels. It was possible before to completely
// 'change' a SdrObject to another SdrModel (including dangerous MigrateItemPool
// stuff), but is no longer. We need to Clone the SdrObject to the target model
// and ::Create a new SvxShape (set SdrObject there, take obver values, ...)
SdrObject* pClonedSdrShape(pObj->Clone(&mpPage->getSdrModelFromSdrPage()));
pObj->setUnoShape(nullptr);
pClonedSdrShape->setUnoShape(xShape);
// pShape->InvalidateSdrObject();
// pShape->Create(pClonedSdrShape, this);
SdrObject::Free(pObj);
pObj = pClonedSdrShape;
bNeededToClone = true;
}
if(!pObj)
{
@@ -200,8 +217,20 @@
}
else if ( !pObj->IsInserted() )
{
pObj->SetModel(mpModel);
mpPage->InsertObject( pObj );
if(bNeededToClone)
{
// TTTT Unfortunately in SdrObject::SetPage (see there) the
// xShape/UnoShape at the newly cloned SDrObject is *removed* again,
// so re-set it here, the caller *may need it* (e.g. Writer)
uno::Reference< uno::XInterface > xShapeCheck(pObj->getWeakUnoShape());
if( !xShapeCheck.is() )
{
pObj->setUnoShape(xShape);
}
}
}
pShape->Create( pObj, this );
@@ -209,7 +238,6 @@
if ( !pObj->IsInserted() )
{
pObj->SetModel(mpModel);
mpPage->InsertObject( pObj );
}
@@ -242,7 +270,6 @@
}
else if ( !pObj->IsInserted() )
{
pObj->SetModel(mpModel);
mpPage->InsertObject( pObj, 0 );
}
@@ -251,7 +278,6 @@
if ( !pObj->IsInserted() )
{
pObj->SetModel(mpModel);
mpPage->InsertObject( pObj, 0 );
}
@@ -465,7 +491,7 @@
mpModel->SetChanged();
}
SdrObject *SvxDrawPage::CreateSdrObject_(const Reference< drawing::XShape > & xShape)
SdrObject* SvxDrawPage::CreateSdrObject_(const Reference< drawing::XShape > & xShape)
{
sal_uInt16 nType = 0;
SdrInventor nInventor;
@@ -480,7 +506,13 @@
awt::Point aPos = xShape->getPosition();
tools::Rectangle aRect( Point( aPos.X, aPos.Y ), Size( aSize.Width, aSize.Height ) );
SdrObject* pNewObj = SdrObjFactory::MakeNewObject(nInventor, nType, aRect, mpPage);
SdrObject* pNewObj = SdrObjFactory::MakeNewObject(
*mpModel,
nInventor,
nType,
mpPage,
&aRect);
if (!pNewObj)
return nullptr;
@@ -680,39 +712,37 @@
SdrPage* pSdrPage = mpPage->GetSdrPage();
if( pSdrPage )
{
SdrModel* pSdrModel = pSdrPage->GetModel();
if( pSdrModel )
SdrModel& rSdrModel(pSdrPage->getSdrModelFromSdrPage());
::comphelper::IEmbeddedHelper *pPersist = rSdrModel.GetPersist();
if( pPersist )
{
::comphelper::IEmbeddedHelper *pPersist = pSdrModel->GetPersist();
if( pPersist )
uno::Reference < embed::XEmbeddedObject > xObject = pPersist->getEmbeddedObjectContainer().
GetEmbeddedObject( static_cast< SdrOle2Obj* >( pObj )->GetPersistName() );
// TODO CL->KA: Why is this not working anymore?
if( xObject.is() )
{
uno::Reference < embed::XEmbeddedObject > xObject = pPersist->getEmbeddedObjectContainer().
GetEmbeddedObject( static_cast< SdrOle2Obj* >( pObj )->GetPersistName() );
SvGlobalName aClassId( xObject->getClassID() );
// TODO CL->KA: Why is this not working anymore?
if( xObject.is() )
const SvGlobalName aAppletClassId( SO3_APPLET_CLASSID );
const SvGlobalName aPluginClassId( SO3_PLUGIN_CLASSID );
const SvGlobalName aIFrameClassId( SO3_IFRAME_CLASSID );
if( aPluginClassId == aClassId )
{
SvGlobalName aClassId( xObject->getClassID() );
const SvGlobalName aAppletClassId( SO3_APPLET_CLASSID );
const SvGlobalName aPluginClassId( SO3_PLUGIN_CLASSID );
const SvGlobalName aIFrameClassId( SO3_IFRAME_CLASSID );
if( aPluginClassId == aClassId )
{
pRet = new SvxPluginShape( pObj );
nType = OBJ_OLE2_PLUGIN;
}
else if( aAppletClassId == aClassId )
{
pRet = new SvxAppletShape( pObj );
nType = OBJ_OLE2_APPLET;
}
else if( aIFrameClassId == aClassId )
{
pRet = new SvxFrameShape( pObj );
nType = OBJ_FRAME;
}
pRet = new SvxPluginShape( pObj );
nType = OBJ_OLE2_PLUGIN;
}
else if( aAppletClassId == aClassId )
{
pRet = new SvxAppletShape( pObj );
nType = OBJ_OLE2_APPLET;
}
else if( aIFrameClassId == aClassId )
{
pRet = new SvxFrameShape( pObj );
nType = OBJ_FRAME;
}
}
}
@@ -812,7 +842,6 @@
SdrObject* pObj = CreateSdrObject_( xShape );
if( pObj)
{
pObj->SetModel(mpModel);
if ( !pObj->IsInserted() && !pObj->IsDoNotInsertIntoPageAutomatically() )
{
if(bBeginning)
@@ -847,21 +876,6 @@
return SvxDrawPage::CreateShapeByTypeAndInventor( nType, nInventor, nullptr, nullptr, referer );
}
void SvxDrawPage::ChangeModel( SdrModel* pNewModel )
{
if( pNewModel != mpModel )
{
mpModel = pNewModel;
if( mpView )
{
delete mpView;
mpView = new SdrView( mpModel );
mpView->SetDesignMode();
}
}
}
/** returns a StarOffice API wrapper for the given SdrPage */
uno::Reference< drawing::XDrawPage > GetXDrawPageForSdrPage( SdrPage* pPage ) throw ()
{
diff --git a/svx/source/unodraw/unoshap2.cxx b/svx/source/unodraw/unoshap2.cxx
index 8c5fc28..3410663 100644
--- a/svx/source/unodraw/unoshap2.cxx
+++ b/svx/source/unodraw/unoshap2.cxx
@@ -181,7 +181,7 @@
void SvxShapeGroup::addUnoShape( const uno::Reference< drawing::XShape >& xShape, size_t nPos )
{
if (!mpObj.is() || !mxPage.is())
if (!HasSdrObject() || !mxPage.is())
{
OSL_FAIL("could not add XShape to group shape!");
return;
@@ -201,8 +201,10 @@
if( pSdrShape->IsInserted() )
pSdrShape->GetObjList()->RemoveObject( pSdrShape->GetOrdNum() );
mpObj->GetSubList()->InsertObject(pSdrShape, nPos);
pSdrShape->SetModel(mpObj->GetModel());
GetSdrObject()->GetSubList()->InsertObject(pSdrShape, nPos);
// TTTT Was created using mpModel in CreateSdrObject_ above
// TTTT may be good to add a assertion here for the future
// pSdrShape->SetModel(GetSdrObject()->GetModel());
// #85922# It makes no sense to set the layer asked
// from the group object since these is an iteration
@@ -217,8 +219,7 @@
// would be created when this connection would not already exist.
pShape->Create( pSdrShape, mxPage.get() );
if( mpModel )
mpModel->SetChanged();
GetSdrObject()->getSdrModelFromSdrObject().SetChanged();
}
// XShapes
@@ -241,7 +242,7 @@
if( pShape )
pSdrShape = pShape->GetSdrObject();
if( !mpObj.is() || pSdrShape == nullptr || pSdrShape->GetObjList()->GetOwnerObj() != mpObj.get() )
if( !HasSdrObject() || pSdrShape == nullptr || pSdrShape->GetObjList()->GetOwnerObj() != GetSdrObject() )
throw uno::RuntimeException();
SdrObjList& rList = *pSdrShape->GetObjList();
@@ -278,8 +279,7 @@
SAL_WARN( "svx", "Fatality! SdrObject is not belonging to its SdrObjList! [CL]" );
}
if( mpModel )
mpModel->SetChanged();
GetSdrObject()->getSdrModelFromSdrObject().SetChanged();
}
void SAL_CALL SvxShapeGroup::addTop( const uno::Reference< drawing::XShape >& xShape )
@@ -305,10 +305,10 @@
{
::SolarMutexGuard aGuard;
if(!mpObj.is() || !mpObj->GetSubList())
if(!HasSdrObject() || !GetSdrObject()->GetSubList())
throw uno::RuntimeException();
sal_Int32 nRetval = mpObj->GetSubList()->GetObjCount();
sal_Int32 nRetval = GetSdrObject()->GetSubList()->GetObjCount();
return nRetval;
}
@@ -317,13 +317,13 @@
{
::SolarMutexGuard aGuard;
if( !mpObj.is() || mpObj->GetSubList() == nullptr )
if( !HasSdrObject() || GetSdrObject()->GetSubList() == nullptr )
throw uno::RuntimeException();
if( Index<0 || mpObj->GetSubList()->GetObjCount() <= static_cast<size_t>(Index) )
if( Index<0 || GetSdrObject()->GetSubList()->GetObjCount() <= static_cast<size_t>(Index) )
throw lang::IndexOutOfBoundsException();
SdrObject* pDestObj = mpObj->GetSubList()->GetObj( Index );
SdrObject* pDestObj = GetSdrObject()->GetSubList()->GetObj( Index );
if(pDestObj == nullptr)
throw lang::IndexOutOfBoundsException();
@@ -345,7 +345,7 @@
{
::SolarMutexGuard aGuard;
return mpObj.is() && mpObj->GetSubList() && (mpObj->GetSubList()->GetObjCount() > 0);
return HasSdrObject() && GetSdrObject()->GetSubList() && (GetSdrObject()->GetSubList()->GetObjCount() > 0);
}
SvxShapeConnector::SvxShapeConnector(SdrObject* pObj)
@@ -438,10 +438,9 @@
SvxShape* pShape = SvxShape::getImplementation( xRef );
if( pShape )
mpObj->ConnectToNode( true, pShape->mpObj.get() );
GetSdrObject()->ConnectToNode( true, pShape->GetSdrObject() );
if( mpModel )
mpModel->SetChanged();
GetSdrObject()->getSdrModelFromSdrObject().SetChanged();
}
@@ -452,11 +451,10 @@
Reference< drawing::XShape > xRef( xShape, UNO_QUERY );
SvxShape* pShape = SvxShape::getImplementation( xRef );
if( mpObj.is() && pShape )
mpObj->ConnectToNode( false, pShape->mpObj.get() );
if( HasSdrObject() && pShape )
GetSdrObject()->ConnectToNode( false, pShape->GetSdrObject() );
if( mpModel )
mpModel->SetChanged();
GetSdrObject()->getSdrModelFromSdrObject().SetChanged();
}
@@ -464,11 +462,10 @@
{
::SolarMutexGuard aGuard;
if(mpObj.is())
mpObj->DisconnectFromNode( true );
if(HasSdrObject())
GetSdrObject()->DisconnectFromNode( true );
if( mpModel )
mpModel->SetChanged();
GetSdrObject()->getSdrModelFromSdrObject().SetChanged();
}
@@ -476,11 +473,10 @@
{
::SolarMutexGuard aGuard;
if(mpObj.is())
mpObj->DisconnectFromNode( false );
if(HasSdrObject())
GetSdrObject()->DisconnectFromNode( false );
if( mpModel )
mpModel->SetChanged();
GetSdrObject()->getSdrModelFromSdrObject().SetChanged();
}
SvxShapeControl::SvxShapeControl(SdrObject* pObj)
@@ -572,7 +568,7 @@
Reference< awt::XControlModel > xModel;
SdrUnoObj* pUnoObj = dynamic_cast< SdrUnoObj * >(mpObj.get());
SdrUnoObj* pUnoObj = dynamic_cast< SdrUnoObj * >(GetSdrObject());
if( pUnoObj )
xModel = pUnoObj->GetUnoControlModel();
@@ -584,12 +580,11 @@
{
::SolarMutexGuard aGuard;
SdrUnoObj* pUnoObj = dynamic_cast< SdrUnoObj * >(mpObj.get());
SdrUnoObj* pUnoObj = dynamic_cast< SdrUnoObj * >(GetSdrObject());
if( pUnoObj )
pUnoObj->SetUnoControlModel( xControl );
if( mpModel )
mpModel->SetChanged();
GetSdrObject()->getSdrModelFromSdrObject().SetChanged();
}
static struct
@@ -983,14 +978,14 @@
{
if( auto s = o3tl::tryAccess<drawing::PointSequenceSequence>(rValue) )
{
if( mpObj.is() )
if( HasSdrObject() )
{
basegfx::B2DPolyPolygon aNewPolyPolygon;
basegfx::B2DHomMatrix aNewHomogenMatrix;
mpObj->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
GetSdrObject()->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
aNewPolyPolygon = ImplSvxPointSequenceSequenceToB2DPolyPolygon(s);
mpObj->TRSetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
GetSdrObject()->TRSetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
}
return true;
}
@@ -1093,8 +1088,8 @@
basegfx::B2DPolyPolygon aNewPolyPolygon;
basegfx::B2DHomMatrix aNewHomogenMatrix;
if(mpObj.is())
mpObj->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
if(HasSdrObject())
GetSdrObject()->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
drawing::PointSequenceSequence aRetval(aNewPolyPolygon.count());
B2DPolyPolygonToSvxPointSequenceSequence(aNewPolyPolygon, aRetval);
@@ -1147,8 +1142,8 @@
{
::SolarMutexGuard aGuard;
if(mpObj.is())
static_cast<SdrPathObj*>(mpObj.get())->SetPathPoly(rNew);
if(HasSdrObject())
static_cast<SdrPathObj*>(GetSdrObject())->SetPathPoly(rNew);
}
@@ -1156,9 +1151,9 @@
{
::SolarMutexGuard aGuard;
if(mpObj.is())
if(HasSdrObject())
{
return static_cast<SdrPathObj*>(mpObj.get())->GetPathPoly();
return static_cast<SdrPathObj*>(GetSdrObject())->GetPathPoly();
}
else
{
@@ -1195,15 +1190,15 @@
{
if( auto s = o3tl::tryAccess<drawing::PolyPolygonBezierCoords>(rValue) )
{
if( mpObj.is() )
if( HasSdrObject() )
{
basegfx::B2DPolyPolygon aNewPolyPolygon;
basegfx::B2DHomMatrix aNewHomogenMatrix;
mpObj->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
GetSdrObject()->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
aNewPolyPolygon = basegfx::unotools::polyPolygonBezierToB2DPolyPolygon(
*s);
mpObj->TRSetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
GetSdrObject()->TRSetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
}
return true;
}
@@ -1236,7 +1231,7 @@
// pack a tools::PolyPolygon in a struct tools::PolyPolygon
basegfx::B2DPolyPolygon aNewPolyPolygon;
basegfx::B2DHomMatrix aNewHomogenMatrix;
mpObj.get()->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
GetSdrObject()->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
drawing::PolyPolygonBezierCoords aRetval;
basegfx::unotools::b2DPolyPolygonToPolyPolygonBezier(aNewPolyPolygon, aRetval);
@@ -1259,8 +1254,8 @@
{
::SolarMutexGuard aGuard;
if(mpObj.is())
static_cast<SdrPathObj*>(mpObj.get())->SetPathPoly(rNew);
if(HasSdrObject())
static_cast<SdrPathObj*>(GetSdrObject())->SetPathPoly(rNew);
}
@@ -1268,9 +1263,9 @@
{
::SolarMutexGuard aGuard;
if(mpObj.is())
if(HasSdrObject())
{
return static_cast<SdrPathObj*>(mpObj.get())->GetPathPoly();
return static_cast<SdrPathObj*>(GetSdrObject())->GetPathPoly();
}
else
{
@@ -1303,7 +1298,7 @@
if( GraphicConverter::Import( aMemStm, aGraphic ) == ERRCODE_NONE )
{
static_cast<SdrGrafObj*>(mpObj.get())->SetGraphic(aGraphic);
static_cast<SdrGrafObj*>(GetSdrObject())->SetGraphic(aGraphic);
bOk = true;
}
}
@@ -1312,7 +1307,7 @@
auto xGraphic = rValue.get<uno::Reference<graphic::XGraphic>>();
if (xGraphic.is())
{
static_cast<SdrGrafObj*>(mpObj.get())->SetGraphic(Graphic(xGraphic));
static_cast<SdrGrafObj*>(GetSdrObject())->SetGraphic(Graphic(xGraphic));
bOk = true;
}
}
@@ -1323,7 +1318,7 @@
{
uno::Reference<graphic::XGraphic> xGraphic(xBitmap, uno::UNO_QUERY);
Graphic aGraphic(xGraphic);
static_cast<SdrGrafObj*>(mpObj.get())->SetGraphic(aGraphic);
static_cast<SdrGrafObj*>(GetSdrObject())->SetGraphic(aGraphic);
bOk = true;
}
}
@@ -1339,9 +1334,9 @@
if( !aStreamURL.startsWith( UNO_NAME_GRAPHOBJ_URLPKGPREFIX ) )
aStreamURL.clear();
if( mpObj.is() )
if( HasSdrObject() )
{
static_cast<SdrGrafObj*>(mpObj.get())->SetGrafStreamURL( aStreamURL );
static_cast<SdrGrafObj*>(GetSdrObject())->SetGrafStreamURL( aStreamURL );
}
bOk = true;
}
@@ -1353,7 +1348,7 @@
Reference< graphic::XGraphic > xGraphic( rValue, uno::UNO_QUERY );
if( xGraphic.is() )
{
static_cast< SdrGrafObj*>( mpObj.get() )->SetGraphic( xGraphic );
static_cast< SdrGrafObj*>( GetSdrObject() )->SetGraphic( xGraphic );
bOk = true;
}
break;
@@ -1364,7 +1359,7 @@
bool bIsSignatureLine;
if (rValue >>= bIsSignatureLine)
{
static_cast<SdrGrafObj*>(mpObj.get())->setIsSignatureLine(bIsSignatureLine);
static_cast<SdrGrafObj*>(GetSdrObject())->setIsSignatureLine(bIsSignatureLine);
bOk = true;
}
break;
@@ -1375,7 +1370,7 @@
OUString aSignatureLineId;
if (rValue >>= aSignatureLineId)
{
static_cast<SdrGrafObj*>(mpObj.get())->setSignatureLineId(aSignatureLineId);
static_cast<SdrGrafObj*>(GetSdrObject())->setSignatureLineId(aSignatureLineId);
bOk = true;
}
break;
@@ -1386,7 +1381,7 @@
OUString aSuggestedSignerName;
if (rValue >>= aSuggestedSignerName)
{
static_cast<SdrGrafObj*>(mpObj.get())->setSignatureLineSuggestedSignerName(aSuggestedSignerName);
static_cast<SdrGrafObj*>(GetSdrObject())->setSignatureLineSuggestedSignerName(aSuggestedSignerName);
bOk = true;
}
break;
@@ -1397,7 +1392,7 @@
OUString aSuggestedSignerTitle;
if (rValue >>= aSuggestedSignerTitle)
{
static_cast<SdrGrafObj*>(mpObj.get())->setSignatureLineSuggestedSignerTitle(aSuggestedSignerTitle);
static_cast<SdrGrafObj*>(GetSdrObject())->setSignatureLineSuggestedSignerTitle(aSuggestedSignerTitle);
bOk = true;
}
break;
@@ -1408,7 +1403,7 @@
OUString aSuggestedSignerEmail;
if (rValue >>= aSuggestedSignerEmail)
{
static_cast<SdrGrafObj*>(mpObj.get())->setSignatureLineSuggestedSignerEmail(aSuggestedSignerEmail);
static_cast<SdrGrafObj*>(GetSdrObject())->setSignatureLineSuggestedSignerEmail(aSuggestedSignerEmail);
bOk = true;
}
break;
@@ -1419,7 +1414,7 @@
OUString aSigningInstructions;
if (rValue >>= aSigningInstructions)
{
static_cast<SdrGrafObj*>(mpObj.get())->setSignatureLineSigningInstructions(aSigningInstructions);
static_cast<SdrGrafObj*>(GetSdrObject())->setSignatureLineSigningInstructions(aSigningInstructions);
bOk = true;
}
break;
@@ -1430,7 +1425,7 @@
bool bShowSignDate;
if (rValue >>= bShowSignDate)
{
static_cast<SdrGrafObj*>(mpObj.get())->setSignatureLineShowSignDate(bShowSignDate);
static_cast<SdrGrafObj*>(GetSdrObject())->setSignatureLineShowSignDate(bShowSignDate);
bOk = true;
}
break;
@@ -1441,7 +1436,7 @@
bool bCanAddComment;
if (rValue >>= bCanAddComment)
{
static_cast<SdrGrafObj*>(mpObj.get())->setSignatureLineCanAddComment(bCanAddComment);
static_cast<SdrGrafObj*>(GetSdrObject())->setSignatureLineCanAddComment(bCanAddComment);
bOk = true;
}
break;
@@ -1452,7 +1447,7 @@
Reference<graphic::XGraphic> xGraphic(rValue, uno::UNO_QUERY);
if (xGraphic.is())
{
static_cast<SdrGrafObj*>(mpObj.get())->setSignatureLineUnsignedGraphic(xGraphic);
static_cast<SdrGrafObj*>(GetSdrObject())->setSignatureLineUnsignedGraphic(xGraphic);
bOk = true;
}
break;
@@ -1465,8 +1460,7 @@
if( !bOk )
throw lang::IllegalArgumentException();
if( mpModel )
mpModel->SetChanged();
GetSdrObject()->getSdrModelFromSdrObject().SetChanged();
return true;
}
@@ -1477,7 +1471,7 @@
{
case OWN_ATTR_VALUE_FILLBITMAP:
{
const Graphic& rGraphic = static_cast<SdrGrafObj*>(mpObj.get())->GetGraphic();
const Graphic& rGraphic = static_cast<SdrGrafObj*>(GetSdrObject())->GetGraphic();
if (rGraphic.GetType() != GraphicType::GdiMetafile)
{
@@ -1499,7 +1493,7 @@
case OWN_ATTR_REPLACEMENT_GRAPHIC:
{
const GraphicObject* pGrafObj = static_cast< SdrGrafObj* >(mpObj.get())->GetReplacementGraphicObject();
const GraphicObject* pGrafObj = static_cast< SdrGrafObj* >(GetSdrObject())->GetReplacementGraphicObject();
if (pGrafObj)
{
@@ -1511,7 +1505,7 @@
case OWN_ATTR_GRAFSTREAMURL:
{
const OUString aStreamURL( static_cast<SdrGrafObj*>( mpObj.get() )->GetGrafStreamURL() );
const OUString aStreamURL( static_cast<SdrGrafObj*>( GetSdrObject() )->GetGrafStreamURL() );
if( !aStreamURL.isEmpty() )
rValue <<= aStreamURL;
break;
@@ -1520,7 +1514,7 @@
case OWN_ATTR_VALUE_GRAPHIC:
{
Reference<graphic::XGraphic> xGraphic;
auto pSdrGraphicObject = static_cast<SdrGrafObj*>(mpObj.get());
auto pSdrGraphicObject = static_cast<SdrGrafObj*>(GetSdrObject());
if (pSdrGraphicObject->GetGraphicObject().GetType() != GraphicType::NONE)
xGraphic = pSdrGraphicObject->GetGraphic().GetXGraphic();
rValue <<= xGraphic;
@@ -1529,62 +1523,62 @@
case OWN_ATTR_GRAPHIC_STREAM:
{
rValue <<= static_cast< SdrGrafObj* >( mpObj.get() )->getInputStream();
rValue <<= static_cast< SdrGrafObj* >( GetSdrObject() )->getInputStream();
break;
}
case OWN_ATTR_IS_SIGNATURELINE:
{
rValue <<= static_cast<SdrGrafObj*>(mpObj.get())->isSignatureLine();
rValue <<= static_cast<SdrGrafObj*>(GetSdrObject())->isSignatureLine();
break;
}
case OWN_ATTR_SIGNATURELINE_ID:
{
rValue <<= static_cast<SdrGrafObj*>(mpObj.get())->getSignatureLineId();
rValue <<= static_cast<SdrGrafObj*>(GetSdrObject())->getSignatureLineId();
break;
}
case OWN_ATTR_SIGNATURELINE_SUGGESTED_SIGNER_NAME:
{
rValue <<= static_cast<SdrGrafObj*>(mpObj.get())->getSignatureLineSuggestedSignerName();
rValue <<= static_cast<SdrGrafObj*>(GetSdrObject())->getSignatureLineSuggestedSignerName();
break;
}
case OWN_ATTR_SIGNATURELINE_SUGGESTED_SIGNER_TITLE:
{
rValue <<= static_cast<SdrGrafObj*>(mpObj.get())->getSignatureLineSuggestedSignerTitle();
rValue <<= static_cast<SdrGrafObj*>(GetSdrObject())->getSignatureLineSuggestedSignerTitle();
break;
}
case OWN_ATTR_SIGNATURELINE_SUGGESTED_SIGNER_EMAIL:
{
rValue <<= static_cast<SdrGrafObj*>(mpObj.get())->getSignatureLineSuggestedSignerEmail();
rValue <<= static_cast<SdrGrafObj*>(GetSdrObject())->getSignatureLineSuggestedSignerEmail();
break;
}
case OWN_ATTR_SIGNATURELINE_SIGNING_INSTRUCTIONS:
{
rValue <<= static_cast<SdrGrafObj*>(mpObj.get())->getSignatureLineSigningInstructions();
rValue <<= static_cast<SdrGrafObj*>(GetSdrObject())->getSignatureLineSigningInstructions();
break;
}
case OWN_ATTR_SIGNATURELINE_SHOW_SIGN_DATE:
{
rValue <<= static_cast<SdrGrafObj*>(mpObj.get())->isSignatureLineShowSignDate();
rValue <<= static_cast<SdrGrafObj*>(GetSdrObject())->isSignatureLineShowSignDate();
break;
}
case OWN_ATTR_SIGNATURELINE_CAN_ADD_COMMENT:
{
rValue <<= static_cast<SdrGrafObj*>(mpObj.get())->isSignatureLineCanAddComment();
rValue <<= static_cast<SdrGrafObj*>(GetSdrObject())->isSignatureLineCanAddComment();
break;
}
case OWN_ATTR_SIGNATURELINE_UNSIGNED_IMAGE:
{
Reference<graphic::XGraphic> xGraphic(
static_cast<SdrGrafObj*>(mpObj.get())->getSignatureLineUnsignedGraphic());
static_cast<SdrGrafObj*>(GetSdrObject())->getSignatureLineUnsignedGraphic());
rValue <<= xGraphic;
break;
}
@@ -1655,21 +1649,21 @@
awt::Point SAL_CALL SvxCustomShape::getPosition()
{
::SolarMutexGuard aGuard;
if ( mpModel && mpObj.is() )
if ( HasSdrObject() )
{
SdrAShapeObjGeoData aCustomShapeGeoData;
static_cast<SdrObjCustomShape*>(mpObj.get())->SaveGeoData( aCustomShapeGeoData );
static_cast<SdrObjCustomShape*>(GetSdrObject())->SaveGeoData( aCustomShapeGeoData );
bool bMirroredX = false;
bool bMirroredY = false;
if ( mpObj.is() )
if ( HasSdrObject() )
{
bMirroredX = static_cast<SdrObjCustomShape*>(mpObj.get())->IsMirroredX();
bMirroredY = static_cast<SdrObjCustomShape*>(mpObj.get())->IsMirroredY();
bMirroredX = static_cast<SdrObjCustomShape*>(GetSdrObject())->IsMirroredX();
bMirroredY = static_cast<SdrObjCustomShape*>(GetSdrObject())->IsMirroredY();
}
// get aRect, this is the unrotated snaprect
tools::Rectangle aRect(static_cast<SdrObjCustomShape*>(mpObj.get())->GetLogicRect());
tools::Rectangle aRect(static_cast<SdrObjCustomShape*>(GetSdrObject())->GetLogicRect());
tools::Rectangle aRectangle( aRect );
if ( bMirroredX || bMirroredY )
@@ -1723,8 +1717,8 @@
}
Point aPt( aRectangle.TopLeft() );
if( mpModel->IsWriter() )
aPt -= mpObj->GetAnchorPos();
if( GetSdrObject()->getSdrModelFromSdrObject().IsWriter() )
aPt -= GetSdrObject()->GetAnchorPos();
ForceMetricTo100th_mm(aPt);
return css::awt::Point( aPt.X(), aPt.Y() );
@@ -1738,7 +1732,7 @@
{
::SolarMutexGuard aGuard;
SdrObject* pObject = mpObj.get();
SdrObject* pObject = GetSdrObject();
// tdf#98163 Use a custom slot to have filter code flush the UNO
// API implementations of SdrObjCustomShape. Used e.g. by
@@ -1824,7 +1818,7 @@
{
case SDRATTR_ROTATEANGLE:
{
double fAngle = static_cast<SdrObjCustomShape*>(mpObj.get())->GetObjectRotation();
double fAngle = static_cast<SdrObjCustomShape*>(GetSdrObject())->GetObjectRotation();
fAngle *= 100;
rValue <<= static_cast<sal_Int32>(fAngle);
return true;
@@ -1836,13 +1830,13 @@
void SvxCustomShape::createCustomShapeDefaults( const OUString& rValueType )
{
if (!mpObj.is())
if (!HasSdrObject())
{
OSL_FAIL("could not create Custom Shape Defaults!");
return;
}
static_cast<SdrObjCustomShape*>(mpObj.get())->MergeDefaultAttributes( &rValueType );
static_cast<SdrObjCustomShape*>(GetSdrObject())->MergeDefaultAttributes( &rValueType );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/unodraw/unoshap3.cxx b/svx/source/unodraw/unoshap3.cxx
index 66ac52b..663dcc9 100644
--- a/svx/source/unodraw/unoshap3.cxx
+++ b/svx/source/unodraw/unoshap3.cxx
@@ -45,6 +45,7 @@
#include <basegfx/polygon/b3dpolygontools.hxx>
#include <com/sun/star/drawing/PolyPolygonShape3D.hpp>
#include <basegfx/polygon/b2dpolypolygontools.hxx>
#include <basegfx/matrix/b3dhommatrixtools.hxx>
#include "shapeimpl.hxx"
using namespace ::cppu;
@@ -118,13 +119,13 @@
SvxShape* pShape = SvxShape::getImplementation( xShape );
if(!mpObj.is() || !mxPage.is() || pShape == nullptr || nullptr != pShape->GetSdrObject() )
if(!HasSdrObject() || !mxPage.is() || pShape == nullptr || nullptr != pShape->GetSdrObject() )
throw uno::RuntimeException();
SdrObject* pSdrShape = mxPage->CreateSdrObject_( xShape );
if( dynamic_cast<const E3dObject* >(pSdrShape) != nullptr )
{
mpObj->GetSubList()->NbcInsertObject( pSdrShape );
GetSdrObject()->GetSubList()->NbcInsertObject( pSdrShape );
if(pShape)
pShape->Create( pSdrShape, mxPage.get() );
@@ -135,8 +136,7 @@
throw uno::RuntimeException();
}
if( mpModel )
mpModel->SetChanged();
GetSdrObject()->getSdrModelFromSdrObject().SetChanged();
}
@@ -146,11 +146,11 @@
SvxShape* pShape = SvxShape::getImplementation( xShape );
if(!mpObj.is() || pShape == nullptr)
if(!HasSdrObject() || pShape == nullptr)
throw uno::RuntimeException();
SdrObject* pSdrShape = pShape->GetSdrObject();
if(pSdrShape == nullptr || pSdrShape->GetObjList()->GetOwnerObj() != mpObj.get())
if(pSdrShape == nullptr || pSdrShape->GetObjList()->GetOwnerObj() != GetSdrObject())
{
throw uno::RuntimeException();
}
@@ -184,8 +184,8 @@
sal_Int32 nRetval = 0;
if(mpObj.is() && dynamic_cast<const E3dScene* >(mpObj.get()) != nullptr && mpObj->GetSubList())
nRetval = mpObj->GetSubList()->GetObjCount();
if(HasSdrObject() && dynamic_cast<const E3dScene* >(GetSdrObject()) != nullptr && GetSdrObject()->GetSubList())
nRetval = GetSdrObject()->GetSubList()->GetObjCount();
return nRetval;
}
@@ -194,13 +194,13 @@
{
SolarMutexGuard aGuard;
if( !mpObj.is() || mpObj->GetSubList() == nullptr )
if( !HasSdrObject() || GetSdrObject()->GetSubList() == nullptr )
throw uno::RuntimeException();
if( Index<0 || mpObj->GetSubList()->GetObjCount() <= static_cast<size_t>(Index) )
if( Index<0 || GetSdrObject()->GetSubList()->GetObjCount() <= static_cast<size_t>(Index) )
throw lang::IndexOutOfBoundsException();
SdrObject* pDestObj = mpObj->GetSubList()->GetObj( Index );
SdrObject* pDestObj = GetSdrObject()->GetSubList()->GetObj( Index );
if(pDestObj == nullptr)
throw lang::IndexOutOfBoundsException();
@@ -221,33 +221,16 @@
{
SolarMutexGuard aGuard;
return mpObj.is() && mpObj->GetSubList() && (mpObj->GetSubList()->GetObjCount() > 0);
return HasSdrObject() && GetSdrObject()->GetSubList() && (GetSdrObject()->GetSubList()->GetObjCount() > 0);
}
static bool ConvertHomogenMatrixToObject( E3dObject* pObject, const Any& rValue )
{
drawing::HomogenMatrix m;
if( rValue >>= m )
drawing::HomogenMatrix aMat;
if( rValue >>= aMat )
{
basegfx::B3DHomMatrix aMat;
aMat.set(0, 0, m.Line1.Column1);
aMat.set(0, 1, m.Line1.Column2);
aMat.set(0, 2, m.Line1.Column3);
aMat.set(0, 3, m.Line1.Column4);
aMat.set(1, 0, m.Line2.Column1);
aMat.set(1, 1, m.Line2.Column2);
aMat.set(1, 2, m.Line2.Column3);
aMat.set(1, 3, m.Line2.Column4);
aMat.set(2, 0, m.Line3.Column1);
aMat.set(2, 1, m.Line3.Column2);
aMat.set(2, 2, m.Line3.Column3);
aMat.set(2, 3, m.Line3.Column4);
aMat.set(3, 0, m.Line4.Column1);
aMat.set(3, 1, m.Line4.Column2);
aMat.set(3, 2, m.Line4.Column3);
aMat.set(3, 3, m.Line4.Column4);
pObject->SetTransform(aMat);
pObject->SetTransform(basegfx::utils::UnoHomogenMatrixToB3DHomMatrix(aMat));
return true;
}
return false;
@@ -257,22 +240,7 @@
{
drawing::HomogenMatrix aHomMat;
const basegfx::B3DHomMatrix& rMat = pObject->GetTransform();
aHomMat.Line1.Column1 = rMat.get(0, 0);
aHomMat.Line1.Column2 = rMat.get(0, 1);
aHomMat.Line1.Column3 = rMat.get(0, 2);
aHomMat.Line1.Column4 = rMat.get(0, 3);
aHomMat.Line2.Column1 = rMat.get(1, 0);
aHomMat.Line2.Column2 = rMat.get(1, 1);
aHomMat.Line2.Column3 = rMat.get(1, 2);
aHomMat.Line2.Column4 = rMat.get(1, 3);
aHomMat.Line3.Column1 = rMat.get(2, 0);
aHomMat.Line3.Column2 = rMat.get(2, 1);
aHomMat.Line3.Column3 = rMat.get(2, 2);
aHomMat.Line3.Column4 = rMat.get(2, 3);
aHomMat.Line4.Column1 = rMat.get(3, 0);
aHomMat.Line4.Column2 = rMat.get(3, 1);
aHomMat.Line4.Column3 = rMat.get(3, 2);
aHomMat.Line4.Column4 = rMat.get(3, 3);
basegfx::utils::B3DHomMatrixToUnoHomogenMatrix(rMat, aHomMat);
rValue <<= aHomMat;
}
@@ -290,14 +258,14 @@
case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
{
// patch transformation matrix to the object
if( ConvertHomogenMatrixToObject( static_cast< E3dObject* >( mpObj.get() ), rValue ) )
if( ConvertHomogenMatrixToObject( static_cast< E3dObject* >( GetSdrObject() ), rValue ) )
return true;
break;
}
case OWN_ATTR_3D_VALUE_CAMERA_GEOMETRY:
{
// set CameraGeometry at scene
E3dScene* pScene = static_cast< E3dScene* >( mpObj.get() );
E3dScene* pScene = static_cast< E3dScene* >( GetSdrObject() );
drawing::CameraGeometry aCamGeo;
if(rValue >>= aCamGeo)
@@ -402,13 +370,13 @@
case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
{
// patch object to a homogeneous 4x4 matrix
ConvertObjectToHomogenMatric( static_cast< E3dObject* >( mpObj.get() ), rValue );
ConvertObjectToHomogenMatric( static_cast< E3dObject* >( GetSdrObject() ), rValue );
break;
}
case OWN_ATTR_3D_VALUE_CAMERA_GEOMETRY:
{
// get CameraGeometry from scene
E3dScene* pScene = static_cast< E3dScene* >( mpObj.get() );
E3dScene* pScene = static_cast< E3dScene* >( GetSdrObject() );
drawing::CameraGeometry aCamGeo;
// fill Vectors from scene camera
@@ -464,7 +432,7 @@
case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
{
// pack transformationmatrix to the object
if( ConvertHomogenMatrixToObject( static_cast< E3dObject* >( mpObj.get() ), rValue ) )
if( ConvertHomogenMatrixToObject( static_cast< E3dObject* >( GetSdrObject() ), rValue ) )
return true;
break;
}
@@ -475,7 +443,7 @@
if( rValue >>= aUnoPos )
{
basegfx::B3DPoint aPos(aUnoPos.PositionX, aUnoPos.PositionY, aUnoPos.PositionZ);
static_cast< E3dCubeObj* >( mpObj.get() )->SetCubePos(aPos);
static_cast< E3dCubeObj* >( GetSdrObject() )->SetCubePos(aPos);
return true;
}
break;
@@ -487,7 +455,7 @@
if( rValue >>= aDirection )
{
basegfx::B3DVector aSize(aDirection.DirectionX, aDirection.DirectionY, aDirection.DirectionZ);
static_cast< E3dCubeObj* >( mpObj.get() )->SetCubeSize(aSize);
static_cast< E3dCubeObj* >( GetSdrObject() )->SetCubeSize(aSize);
return true;
}
break;
@@ -498,7 +466,7 @@
// pack sal_Bool bPosIsCenter to the object
if( rValue >>= bNew )
{
static_cast< E3dCubeObj* >( mpObj.get() )->SetPosIsCenter(bNew);
static_cast< E3dCubeObj* >( GetSdrObject() )->SetPosIsCenter(bNew);
return true;
}
break;
@@ -517,13 +485,13 @@
case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
{
// pack transformation to a homogeneous matrix
ConvertObjectToHomogenMatric( static_cast< E3dObject* >( mpObj.get() ), rValue );
ConvertObjectToHomogenMatric( static_cast< E3dObject* >( GetSdrObject() ), rValue );
break;
}
case OWN_ATTR_3D_VALUE_POSITION:
{
// pack position
const basegfx::B3DPoint& rPos = static_cast<E3dCubeObj*>(mpObj.get())->GetCubePos();
const basegfx::B3DPoint& rPos = static_cast<E3dCubeObj*>(GetSdrObject())->GetCubePos();
drawing::Position3D aPos;
aPos.PositionX = rPos.getX();
@@ -536,7 +504,7 @@
case OWN_ATTR_3D_VALUE_SIZE:
{
// pack size
const basegfx::B3DVector& rSize = static_cast<E3dCubeObj*>(mpObj.get())->GetCubeSize();
const basegfx::B3DVector& rSize = static_cast<E3dCubeObj*>(GetSdrObject())->GetCubeSize();
drawing::Direction3D aDir;
aDir.DirectionX = rSize.getX();
@@ -548,7 +516,7 @@
}
case OWN_ATTR_3D_VALUE_POS_IS_CENTER:
{
rValue <<= static_cast<E3dCubeObj*>(mpObj.get())->GetPosIsCenter();
rValue <<= static_cast<E3dCubeObj*>(GetSdrObject())->GetPosIsCenter();
break;
}
default:
@@ -583,7 +551,7 @@
case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
{
// pack transformation matrix to the object
if( ConvertHomogenMatrixToObject( static_cast< E3dObject* >( mpObj.get() ), rValue ) )
if( ConvertHomogenMatrixToObject( static_cast< E3dObject* >( GetSdrObject() ), rValue ) )
return true;
break;
}
@@ -595,7 +563,7 @@
if( rValue >>= aUnoPos )
{
basegfx::B3DPoint aPos(aUnoPos.PositionX, aUnoPos.PositionY, aUnoPos.PositionZ);
static_cast<E3dSphereObj*>(mpObj.get())->SetCenter(aPos);
static_cast<E3dSphereObj*>(GetSdrObject())->SetCenter(aPos);
return true;
}
break;
@@ -608,7 +576,7 @@
if( rValue >>= aDir )
{
basegfx::B3DVector aPos(aDir.DirectionX, aDir.DirectionY, aDir.DirectionZ);
static_cast<E3dSphereObj*>(mpObj.get())->SetSize(aPos);
static_cast<E3dSphereObj*>(GetSdrObject())->SetSize(aPos);
return true;
}
break;
@@ -627,13 +595,13 @@
case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
{
// pack transformation to a homogeneous matrix
ConvertObjectToHomogenMatric( static_cast< E3dObject* >( mpObj.get() ), rValue );
ConvertObjectToHomogenMatric( static_cast< E3dObject* >( GetSdrObject() ), rValue );
break;
}
case OWN_ATTR_3D_VALUE_POSITION:
{
// pack position
const basegfx::B3DPoint& rPos = static_cast<E3dSphereObj*>(mpObj.get())->Center();
const basegfx::B3DPoint& rPos = static_cast<E3dSphereObj*>(GetSdrObject())->Center();
drawing::Position3D aPos;
aPos.PositionX = rPos.getX();
@@ -646,7 +614,7 @@
case OWN_ATTR_3D_VALUE_SIZE:
{
// pack size
const basegfx::B3DVector& rSize = static_cast<E3dSphereObj*>(mpObj.get())->Size();
const basegfx::B3DVector& rSize = static_cast<E3dSphereObj*>(GetSdrObject())->Size();
drawing::Direction3D aDir;
aDir.DirectionX = rSize.getX();
@@ -776,7 +744,7 @@
case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
{
// pack transformation matrix to the object
if( ConvertHomogenMatrixToObject( static_cast< E3dObject* >( mpObj.get() ), rValue ) )
if( ConvertHomogenMatrixToObject( static_cast< E3dObject* >( GetSdrObject() ), rValue ) )
return true;
break;
}
@@ -791,18 +759,18 @@
// #105127# SetPolyPoly3D sets the Svx3DVerticalSegmentsItem to the number
// of points of the polygon. Thus, value gets lost. To avoid this, rescue
// item here and re-set after setting the polygon.
const sal_uInt32 nPrevVerticalSegs(static_cast<E3dLatheObj*>(mpObj.get())->GetVerticalSegments());
const sal_uInt32 nPrevVerticalSegs(static_cast<E3dLatheObj*>(GetSdrObject())->GetVerticalSegments());
// set polygon
const basegfx::B3DHomMatrix aIdentity;
const basegfx::B2DPolyPolygon aB2DPolyPolygon(basegfx::utils::createB2DPolyPolygonFromB3DPolyPolygon(aNewB3DPolyPolygon, aIdentity));
static_cast<E3dLatheObj*>(mpObj.get())->SetPolyPoly2D(aB2DPolyPolygon);
const sal_uInt32 nPostVerticalSegs(static_cast<E3dLatheObj*>(mpObj.get())->GetVerticalSegments());
static_cast<E3dLatheObj*>(GetSdrObject())->SetPolyPoly2D(aB2DPolyPolygon);
const sal_uInt32 nPostVerticalSegs(static_cast<E3dLatheObj*>(GetSdrObject())->GetVerticalSegments());
if(nPrevVerticalSegs != nPostVerticalSegs)
{
// restore the vertical segment count
static_cast<E3dLatheObj*>(mpObj.get())->SetMergedItem(makeSvx3DVerticalSegmentsItem(nPrevVerticalSegs));
static_cast<E3dLatheObj*>(GetSdrObject())->SetMergedItem(makeSvx3DVerticalSegmentsItem(nPrevVerticalSegs));
}
return true;
}
@@ -823,32 +791,14 @@
{
// pack transformation to a homogeneous matrix
drawing::HomogenMatrix aHomMat;
basegfx::B3DHomMatrix aMat = static_cast<E3dObject*>(mpObj.get())->GetTransform();
// pack evtl. transformed matrix to output
aHomMat.Line1.Column1 = aMat.get(0, 0);
aHomMat.Line1.Column2 = aMat.get(0, 1);
aHomMat.Line1.Column3 = aMat.get(0, 2);
aHomMat.Line1.Column4 = aMat.get(0, 3);
aHomMat.Line2.Column1 = aMat.get(1, 0);
aHomMat.Line2.Column2 = aMat.get(1, 1);
aHomMat.Line2.Column3 = aMat.get(1, 2);
aHomMat.Line2.Column4 = aMat.get(1, 3);
aHomMat.Line3.Column1 = aMat.get(2, 0);
aHomMat.Line3.Column2 = aMat.get(2, 1);
aHomMat.Line3.Column3 = aMat.get(2, 2);
aHomMat.Line3.Column4 = aMat.get(2, 3);
aHomMat.Line4.Column1 = aMat.get(3, 0);
aHomMat.Line4.Column2 = aMat.get(3, 1);
aHomMat.Line4.Column3 = aMat.get(3, 2);
aHomMat.Line4.Column4 = aMat.get(3, 3);
basegfx::B3DHomMatrix aMat = static_cast<E3dObject*>(GetSdrObject())->GetTransform();
basegfx::utils::B3DHomMatrixToUnoHomogenMatrix(aMat, aHomMat);
rValue <<= aHomMat;
break;
}
case OWN_ATTR_3D_VALUE_POLYPOLYGON3D:
{
const basegfx::B2DPolyPolygon& rPolyPoly = static_cast<E3dLatheObj*>(mpObj.get())->GetPolyPoly2D();
const basegfx::B2DPolyPolygon& rPolyPoly = static_cast<E3dLatheObj*>(GetSdrObject())->GetPolyPoly2D();
const basegfx::B3DPolyPolygon aB3DPolyPolygon(basegfx::utils::createB3DPolyPolygonFromB2DPolyPolygon(rPolyPoly));
B3dPolyPolygon_to_PolyPolygonShape3D(aB3DPolyPolygon, rValue);
@@ -886,7 +836,7 @@
case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
{
// pack transformation matrix to the object
if( ConvertHomogenMatrixToObject( static_cast< E3dObject* >( mpObj.get() ), rValue ) )
if( ConvertHomogenMatrixToObject( static_cast< E3dObject* >( GetSdrObject() ), rValue ) )
return true;
break;
}
@@ -902,7 +852,7 @@
// set polygon
const basegfx::B3DHomMatrix aIdentity;
const basegfx::B2DPolyPolygon aB2DPolyPolygon(basegfx::utils::createB2DPolyPolygonFromB3DPolyPolygon(aNewB3DPolyPolygon, aIdentity));
static_cast<E3dExtrudeObj*>(mpObj.get())->SetExtrudePolygon(aB2DPolyPolygon);
static_cast<E3dExtrudeObj*>(GetSdrObject())->SetExtrudePolygon(aB2DPolyPolygon);
return true;
}
break;
@@ -922,26 +872,8 @@
{
// pack transformation to a homogeneous matrix
drawing::HomogenMatrix aHomMat;
basegfx::B3DHomMatrix aMat = static_cast<E3dObject*>(mpObj.get())->GetTransform();
// pack evtl. transformed matrix to output
aHomMat.Line1.Column1 = aMat.get(0, 0);
aHomMat.Line1.Column2 = aMat.get(0, 1);
aHomMat.Line1.Column3 = aMat.get(0, 2);
aHomMat.Line1.Column4 = aMat.get(0, 3);
aHomMat.Line2.Column1 = aMat.get(1, 0);
aHomMat.Line2.Column2 = aMat.get(1, 1);
aHomMat.Line2.Column3 = aMat.get(1, 2);
aHomMat.Line2.Column4 = aMat.get(1, 3);
aHomMat.Line3.Column1 = aMat.get(2, 0);
aHomMat.Line3.Column2 = aMat.get(2, 1);
aHomMat.Line3.Column3 = aMat.get(2, 2);
aHomMat.Line3.Column4 = aMat.get(2, 3);
aHomMat.Line4.Column1 = aMat.get(3, 0);
aHomMat.Line4.Column2 = aMat.get(3, 1);
aHomMat.Line4.Column3 = aMat.get(3, 2);
aHomMat.Line4.Column4 = aMat.get(3, 3);
basegfx::B3DHomMatrix aMat = static_cast<E3dObject*>(GetSdrObject())->GetTransform();
basegfx::utils::B3DHomMatrixToUnoHomogenMatrix(aMat, aHomMat);
rValue <<= aHomMat;
break;
}
@@ -949,7 +881,7 @@
case OWN_ATTR_3D_VALUE_POLYPOLYGON3D:
{
// pack polygon definition
const basegfx::B2DPolyPolygon& rPolyPoly = static_cast<E3dExtrudeObj*>(mpObj.get())->GetExtrudePolygon();
const basegfx::B2DPolyPolygon& rPolyPoly = static_cast<E3dExtrudeObj*>(GetSdrObject())->GetExtrudePolygon();
const basegfx::B3DPolyPolygon aB3DPolyPolygon(basegfx::utils::createB3DPolyPolygonFromB2DPolyPolygon(rPolyPoly));
B3dPolyPolygon_to_PolyPolygonShape3D(aB3DPolyPolygon, rValue);
@@ -987,7 +919,7 @@
case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
{
// pack transformation matrix to the object
if( ConvertHomogenMatrixToObject( static_cast< E3dObject* >( mpObj.get() ), rValue ) )
if( ConvertHomogenMatrixToObject( static_cast< E3dObject* >( GetSdrObject() ), rValue ) )
return true;
break;
}
@@ -1001,7 +933,7 @@
if( PolyPolygonShape3D_to_B3dPolyPolygon( rValue, aNewB3DPolyPolygon, false ) )
{
// set polygon
static_cast<E3dPolygonObj*>(mpObj.get())->SetPolyPolygon3D(aNewB3DPolyPolygon);
static_cast<E3dPolygonObj*>(GetSdrObject())->SetPolyPolygon3D(aNewB3DPolyPolygon);
return true;
}
break;
@@ -1015,7 +947,7 @@
if( PolyPolygonShape3D_to_B3dPolyPolygon( rValue, aNewB3DPolyPolygon, false ) )
{
// set polygon
static_cast<E3dPolygonObj*>(mpObj.get())->SetPolyNormals3D(aNewB3DPolyPolygon);
static_cast<E3dPolygonObj*>(GetSdrObject())->SetPolyNormals3D(aNewB3DPolyPolygon);
return true;
}
break;
@@ -1031,7 +963,7 @@
// set polygon
const basegfx::B3DHomMatrix aIdentity;
const basegfx::B2DPolyPolygon aB2DPolyPolygon(basegfx::utils::createB2DPolyPolygonFromB3DPolyPolygon(aNewB3DPolyPolygon, aIdentity));
static_cast<E3dPolygonObj*>(mpObj.get())->SetPolyTexture2D(aB2DPolyPolygon);
static_cast<E3dPolygonObj*>(GetSdrObject())->SetPolyTexture2D(aB2DPolyPolygon);
return true;
}
break;
@@ -1041,7 +973,7 @@
bool bNew = false;
if( rValue >>= bNew )
{
static_cast<E3dPolygonObj*>(mpObj.get())->SetLineOnly(bNew);
static_cast<E3dPolygonObj*>(GetSdrObject())->SetLineOnly(bNew);
return true;
}
break;
@@ -1059,26 +991,26 @@
{
case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
{
ConvertObjectToHomogenMatric( static_cast< E3dObject* >( mpObj.get() ), rValue );
ConvertObjectToHomogenMatric( static_cast< E3dObject* >( GetSdrObject() ), rValue );
break;
}
case OWN_ATTR_3D_VALUE_POLYPOLYGON3D:
{
B3dPolyPolygon_to_PolyPolygonShape3D(static_cast<E3dPolygonObj*>(mpObj.get())->GetPolyPolygon3D(),rValue);
B3dPolyPolygon_to_PolyPolygonShape3D(static_cast<E3dPolygonObj*>(GetSdrObject())->GetPolyPolygon3D(),rValue);
break;
}
case OWN_ATTR_3D_VALUE_NORMALSPOLYGON3D:
{
B3dPolyPolygon_to_PolyPolygonShape3D(static_cast<E3dPolygonObj*>(mpObj.get())->GetPolyNormals3D(),rValue);
B3dPolyPolygon_to_PolyPolygonShape3D(static_cast<E3dPolygonObj*>(GetSdrObject())->GetPolyNormals3D(),rValue);
break;
}
case OWN_ATTR_3D_VALUE_TEXTUREPOLYGON3D:
{
// pack texture definition
const basegfx::B2DPolyPolygon& rPolyPoly = static_cast<E3dPolygonObj*>(mpObj.get())->GetPolyTexture2D();
const basegfx::B2DPolyPolygon& rPolyPoly = static_cast<E3dPolygonObj*>(GetSdrObject())->GetPolyTexture2D();
const basegfx::B3DPolyPolygon aB3DPolyPolygon(basegfx::utils::createB3DPolyPolygonFromB2DPolyPolygon(rPolyPoly));
B3dPolyPolygon_to_PolyPolygonShape3D(aB3DPolyPolygon,rValue);
@@ -1087,7 +1019,7 @@
case OWN_ATTR_3D_VALUE_LINEONLY:
{
rValue <<= static_cast<E3dPolygonObj*>(mpObj.get())->GetLineOnly();
rValue <<= static_cast<E3dPolygonObj*>(GetSdrObject())->GetLineOnly();
break;
}
diff --git a/svx/source/unodraw/unoshap4.cxx b/svx/source/unodraw/unoshap4.cxx
index a5ef378..c9e4065 100644
--- a/svx/source/unodraw/unoshap4.cxx
+++ b/svx/source/unodraw/unoshap4.cxx
@@ -90,10 +90,10 @@
// TODO/LATER: seems to make no sense for iconified object
awt::Rectangle aVisArea;
if( (rValue >>= aVisArea) && dynamic_cast<const SdrOle2Obj* >(mpObj.get()) != nullptr)
if( (rValue >>= aVisArea) && dynamic_cast<const SdrOle2Obj* >(GetSdrObject()) != nullptr)
{
Size aTmp( aVisArea.X + aVisArea.Width, aVisArea.Y + aVisArea.Height );
uno::Reference < embed::XEmbeddedObject > xObj = static_cast<SdrOle2Obj*>(mpObj.get())->GetObjRef();
uno::Reference < embed::XEmbeddedObject > xObj = static_cast<SdrOle2Obj*>(GetSdrObject())->GetObjRef();
if( xObj.is() )
{
try
@@ -118,7 +118,7 @@
sal_Int64 nAspect = 0;
if( rValue >>= nAspect )
{
static_cast<SdrOle2Obj*>(mpObj.get())->SetAspect( nAspect );
static_cast<SdrOle2Obj*>(GetSdrObject())->SetAspect( nAspect );
return true;
}
break;
@@ -144,7 +144,7 @@
if( xGraphic.is() )
{
const Graphic aGraphic(xGraphic);
static_cast<SdrOle2Obj*>(mpObj.get())->SetGraphic(aGraphic);
static_cast<SdrOle2Obj*>(GetSdrObject())->SetGraphic(aGraphic);
return true;
}
break;
@@ -154,7 +154,7 @@
uno::Reference< graphic::XGraphic > xGraphic( rValue, uno::UNO_QUERY );
if( xGraphic.is() )
{
SdrOle2Obj* pOle = dynamic_cast< SdrOle2Obj* >( mpObj.get() );
SdrOle2Obj* pOle = dynamic_cast< SdrOle2Obj* >( GetSdrObject() );
if( pOle )
{
GraphicObject aGrafObj( xGraphic );
@@ -172,10 +172,10 @@
{
SdrOle2Obj *pOle;
#if OSL_DEBUG_LEVEL > 0
pOle = dynamic_cast<SdrOle2Obj*>(mpObj.get());
pOle = dynamic_cast<SdrOle2Obj*>(GetSdrObject());
assert(pOle);
#else
pOle = static_cast<SdrOle2Obj*>(mpObj.get());
pOle = static_cast<SdrOle2Obj*>(GetSdrObject());
#endif
pOle->SetPersistName( aPersistName );
return true;
@@ -220,7 +220,7 @@
case OWN_ATTR_METAFILE:
{
SdrOle2Obj* pObj = dynamic_cast<SdrOle2Obj*>(mpObj.get());
SdrOle2Obj* pObj = dynamic_cast<SdrOle2Obj*>(GetSdrObject());
if( pObj )
{
const Graphic* pGraphic = pObj->GetGraphic();
@@ -260,10 +260,10 @@
case OWN_ATTR_OLE_VISAREA:
{
awt::Rectangle aVisArea;
if( dynamic_cast<const SdrOle2Obj* >(mpObj.get()) != nullptr)
if( dynamic_cast<const SdrOle2Obj* >(GetSdrObject()) != nullptr)
{
MapMode aMapMode( MapUnit::Map100thMM ); // the API uses this map mode
Size aTmp = static_cast<SdrOle2Obj*>(mpObj.get())->GetOrigObjSize( &aMapMode ); // get the size in the requested map mode
Size aTmp = static_cast<SdrOle2Obj*>(GetSdrObject())->GetOrigObjSize( &aMapMode ); // get the size in the requested map mode
aVisArea = awt::Rectangle( 0, 0, aTmp.Width(), aTmp.Height() );
}
@@ -273,14 +273,14 @@
case OWN_ATTR_OLESIZE:
{
Size aTmp( static_cast<SdrOle2Obj*>(mpObj.get())->GetOrigObjSize() );
Size aTmp( static_cast<SdrOle2Obj*>(GetSdrObject())->GetOrigObjSize() );
rValue <<= awt::Size( aTmp.Width(), aTmp.Height() );
break;
}
case OWN_ATTR_OLE_ASPECT:
{
rValue <<= static_cast<SdrOle2Obj*>(mpObj.get())->GetAspect();
rValue <<= static_cast<SdrOle2Obj*>(GetSdrObject())->GetAspect();
break;
}
@@ -288,7 +288,7 @@
case OWN_ATTR_OLE_EMBEDDED_OBJECT:
case OWN_ATTR_OLE_EMBEDDED_OBJECT_NONEWCLIENT:
{
SdrOle2Obj* pObj = dynamic_cast<SdrOle2Obj*>( mpObj.get() );
SdrOle2Obj* pObj = dynamic_cast<SdrOle2Obj*>( GetSdrObject() );
if( pObj )
{
uno::Reference < embed::XEmbeddedObject > xObj( pObj->GetObjRef() );
@@ -315,7 +315,7 @@
case OWN_ATTR_VALUE_GRAPHIC:
{
uno::Reference< graphic::XGraphic > xGraphic;
const Graphic* pGraphic = static_cast<SdrOle2Obj*>( mpObj.get() )->GetGraphic();
const Graphic* pGraphic = static_cast<SdrOle2Obj*>( GetSdrObject() )->GetGraphic();
if( pGraphic )
xGraphic = pGraphic->GetXGraphic();
rValue <<= xGraphic;
@@ -325,7 +325,7 @@
case OWN_ATTR_THUMBNAIL:
{
uno::Reference< graphic::XGraphic > xGraphic;
const Graphic* pGraphic = static_cast<SdrOle2Obj*>( mpObj.get() )->GetGraphic();
const Graphic* pGraphic = static_cast<SdrOle2Obj*>( GetSdrObject() )->GetGraphic();
if( pGraphic )
xGraphic = pGraphic->GetXGraphic();
rValue <<= xGraphic;
@@ -334,14 +334,14 @@
case OWN_ATTR_PERSISTNAME:
{
OUString aPersistName;
SdrOle2Obj* pOle = dynamic_cast< SdrOle2Obj* >( mpObj.get() );
SdrOle2Obj* pOle = dynamic_cast< SdrOle2Obj* >( GetSdrObject() );
if( pOle )
{
aPersistName = pOle->GetPersistName();
if( !aPersistName.isEmpty() )
{
::comphelper::IEmbeddedHelper *pPersist = mpObj->GetModel()->GetPersist();
::comphelper::IEmbeddedHelper* pPersist(GetSdrObject()->getSdrModelFromSdrObject().GetPersist());
if( (nullptr == pPersist) || !pPersist->getEmbeddedObjectContainer().HasEmbeddedObject( pOle->GetPersistName() ) )
aPersistName.clear();
}
@@ -353,7 +353,7 @@
case OWN_ATTR_OLE_LINKURL:
{
OUString aLinkURL;
SdrOle2Obj* pOle = dynamic_cast< SdrOle2Obj* >( mpObj.get() );
SdrOle2Obj* pOle = dynamic_cast< SdrOle2Obj* >( GetSdrObject() );
if( pOle )
{
@@ -376,12 +376,12 @@
{
DBG_TESTSOLARMUTEX();
SdrOle2Obj* pOle2Obj = dynamic_cast< SdrOle2Obj* >( mpObj.get() );
SdrOle2Obj* pOle2Obj = dynamic_cast< SdrOle2Obj* >( GetSdrObject() );
if ( !pOle2Obj || !pOle2Obj->IsEmpty() )
return false;
// create storage and inplace object
::comphelper::IEmbeddedHelper* pPersist = mpModel->GetPersist();
::comphelper::IEmbeddedHelper* pPersist = GetSdrObject()->getSdrModelFromSdrObject().GetPersist();
OUString aPersistName;
OUString aTmpStr;
if( SvxShape::getPropertyValue( UNO_NAME_OLE2_PERSISTNAME ) >>= aTmpStr )
@@ -438,13 +438,13 @@
{
DBG_TESTSOLARMUTEX();
SdrOle2Obj* pOle2Obj = dynamic_cast< SdrOle2Obj* >( mpObj.get() );
SdrOle2Obj* pOle2Obj = dynamic_cast< SdrOle2Obj* >( GetSdrObject() );
if ( !pOle2Obj || !pOle2Obj->IsEmpty() )
return;
OUString aPersistName;
::comphelper::IEmbeddedHelper* pPersist = mpModel->GetPersist();
::comphelper::IEmbeddedHelper* pPersist = GetSdrObject()->getSdrModelFromSdrObject().GetPersist();
uno::Sequence< beans::PropertyValue > aMediaDescr( 1 );
aMediaDescr[0].Name = "URL";
@@ -497,10 +497,10 @@
void SvxOle2Shape::resetModifiedState()
{
::comphelper::IEmbeddedHelper* pPersist = mpModel ? mpModel->GetPersist() : nullptr;
::comphelper::IEmbeddedHelper* pPersist = GetSdrObject()->getSdrModelFromSdrObject().GetPersist();
if( pPersist && !pPersist->isEnableSetModified() )
{
SdrOle2Obj* pOle = dynamic_cast< SdrOle2Obj* >( mpObj.get() );
SdrOle2Obj* pOle = dynamic_cast< SdrOle2Obj* >( GetSdrObject() );
if( pOle && !pOle->IsEmpty() )
{
uno::Reference < util::XModifiable > xMod( pOle->GetObjRef(), uno::UNO_QUERY );
@@ -515,7 +515,7 @@
{
DBG_TESTSOLARMUTEX();
SvGlobalName aClassName;
SdrOle2Obj* pOle2Obj = dynamic_cast< SdrOle2Obj* >( mpObj.get() );
SdrOle2Obj* pOle2Obj = dynamic_cast< SdrOle2Obj* >( GetSdrObject() );
if( pOle2Obj )
{
@@ -523,7 +523,7 @@
if( pOle2Obj->IsEmpty() )
{
::comphelper::IEmbeddedHelper* pPersist = mpModel->GetPersist();
::comphelper::IEmbeddedHelper* pPersist = GetSdrObject()->getSdrModelFromSdrObject().GetPersist();
if( pPersist )
{
uno::Reference < embed::XEmbeddedObject > xObj =
@@ -584,9 +584,9 @@
{
if( (pProperty->nWID >= OWN_ATTR_APPLET_DOCBASE) && (pProperty->nWID <= OWN_ATTR_APPLET_ISSCRIPT) )
{
if ( svt::EmbeddedObjectRef::TryRunningState( static_cast<SdrOle2Obj*>(mpObj.get())->GetObjRef() ) )
if ( svt::EmbeddedObjectRef::TryRunningState( static_cast<SdrOle2Obj*>(GetSdrObject())->GetObjRef() ) )
{
uno::Reference < beans::XPropertySet > xSet( static_cast<SdrOle2Obj*>(mpObj.get())->GetObjRef()->getComponent(), uno::UNO_QUERY );
uno::Reference < beans::XPropertySet > xSet( static_cast<SdrOle2Obj*>(GetSdrObject())->GetObjRef()->getComponent(), uno::UNO_QUERY );
if( xSet.is() )
{
// allow exceptions to pass through
@@ -605,9 +605,9 @@
{
if( (pProperty->nWID >= OWN_ATTR_APPLET_DOCBASE) && (pProperty->nWID <= OWN_ATTR_APPLET_ISSCRIPT) )
{
if ( svt::EmbeddedObjectRef::TryRunningState( static_cast<SdrOle2Obj*>(mpObj.get())->GetObjRef() ) )
if ( svt::EmbeddedObjectRef::TryRunningState( static_cast<SdrOle2Obj*>(GetSdrObject())->GetObjRef() ) )
{
uno::Reference < beans::XPropertySet > xSet( static_cast<SdrOle2Obj*>(mpObj.get())->GetObjRef()->getComponent(), uno::UNO_QUERY );
uno::Reference < beans::XPropertySet > xSet( static_cast<SdrOle2Obj*>(GetSdrObject())->GetObjRef()->getComponent(), uno::UNO_QUERY );
if( xSet.is() )
{
rValue = xSet->getPropertyValue( rName );
@@ -655,9 +655,9 @@
{
if( (pProperty->nWID >= OWN_ATTR_PLUGIN_MIMETYPE) && (pProperty->nWID <= OWN_ATTR_PLUGIN_COMMANDS) )
{
if( svt::EmbeddedObjectRef::TryRunningState( static_cast<SdrOle2Obj*>(mpObj.get())->GetObjRef() ) )
if( svt::EmbeddedObjectRef::TryRunningState( static_cast<SdrOle2Obj*>(GetSdrObject())->GetObjRef() ) )
{
uno::Reference < beans::XPropertySet > xSet( static_cast<SdrOle2Obj*>(mpObj.get())->GetObjRef()->getComponent(), uno::UNO_QUERY );
uno::Reference < beans::XPropertySet > xSet( static_cast<SdrOle2Obj*>(GetSdrObject())->GetObjRef()->getComponent(), uno::UNO_QUERY );
if( xSet.is() )
{
// allow exceptions to pass through
@@ -676,9 +676,9 @@
{
if( (pProperty->nWID >= OWN_ATTR_PLUGIN_MIMETYPE) && (pProperty->nWID <= OWN_ATTR_PLUGIN_COMMANDS) )
{
if( svt::EmbeddedObjectRef::TryRunningState( static_cast<SdrOle2Obj*>(mpObj.get())->GetObjRef() ) )
if( svt::EmbeddedObjectRef::TryRunningState( static_cast<SdrOle2Obj*>(GetSdrObject())->GetObjRef() ) )
{
uno::Reference < beans::XPropertySet > xSet( static_cast<SdrOle2Obj*>(mpObj.get())->GetObjRef()->getComponent(), uno::UNO_QUERY );
uno::Reference < beans::XPropertySet > xSet( static_cast<SdrOle2Obj*>(GetSdrObject())->GetObjRef()->getComponent(), uno::UNO_QUERY );
if( xSet.is() )
{
rValue = xSet->getPropertyValue( rName );
@@ -727,9 +727,9 @@
{
if( (pProperty->nWID >= OWN_ATTR_FRAME_URL) && (pProperty->nWID <= OWN_ATTR_FRAME_MARGIN_HEIGHT) )
{
if( svt::EmbeddedObjectRef::TryRunningState( static_cast<SdrOle2Obj*>(mpObj.get())->GetObjRef() ) )
if( svt::EmbeddedObjectRef::TryRunningState( static_cast<SdrOle2Obj*>(GetSdrObject())->GetObjRef() ) )
{
uno::Reference < beans::XPropertySet > xSet( static_cast<SdrOle2Obj*>(mpObj.get())->GetObjRef()->getComponent(), uno::UNO_QUERY );
uno::Reference < beans::XPropertySet > xSet( static_cast<SdrOle2Obj*>(GetSdrObject())->GetObjRef()->getComponent(), uno::UNO_QUERY );
if( xSet.is() )
{
// allow exceptions to pass through
@@ -749,9 +749,9 @@
{
if( (pProperty->nWID >= OWN_ATTR_FRAME_URL) && (pProperty->nWID <= OWN_ATTR_FRAME_MARGIN_HEIGHT) )
{
if( svt::EmbeddedObjectRef::TryRunningState( static_cast<SdrOle2Obj*>(mpObj.get())->GetObjRef() ) )
if( svt::EmbeddedObjectRef::TryRunningState( static_cast<SdrOle2Obj*>(GetSdrObject())->GetObjRef() ) )
{
uno::Reference < beans::XPropertySet > xSet( static_cast<SdrOle2Obj*>(mpObj.get())->GetObjRef()->getComponent(), uno::UNO_QUERY );
uno::Reference < beans::XPropertySet > xSet( static_cast<SdrOle2Obj*>(GetSdrObject())->GetObjRef()->getComponent(), uno::UNO_QUERY );
if( xSet.is() )
{
rValue = xSet->getPropertyValue( rName );
@@ -783,7 +783,7 @@
|| (pProperty->nWID == OWN_ATTR_MEDIA_STREAM)
|| (pProperty->nWID == OWN_ATTR_MEDIA_MIMETYPE) )
{
SdrMediaObj* pMedia = static_cast< SdrMediaObj* >( mpObj.get() );
SdrMediaObj* pMedia = static_cast< SdrMediaObj* >( GetSdrObject() );
::avmedia::MediaItem aItem;
bool bOk = false;
@@ -926,7 +926,7 @@
|| (pProperty->nWID == OWN_ATTR_MEDIA_MIMETYPE)
|| (pProperty->nWID == OWN_ATTR_FALLBACK_GRAPHIC))
{
SdrMediaObj* pMedia = static_cast< SdrMediaObj* >( mpObj.get() );
SdrMediaObj* pMedia = static_cast< SdrMediaObj* >( GetSdrObject() );
const ::avmedia::MediaItem aItem( pMedia->getMediaProperties() );
switch( pProperty->nWID )
diff --git a/svx/source/unodraw/unoshape.cxx b/svx/source/unodraw/unoshape.cxx
index 572b31c..c726444 100644
--- a/svx/source/unodraw/unoshape.cxx
+++ b/svx/source/unodraw/unoshape.cxx
@@ -180,8 +180,7 @@
, mbIsMultiPropertyCall(false)
, mpPropSet(getSvxMapProvider().GetPropertySet(SVXMAP_SHAPE, SdrObject::GetGlobalDrawObjectItemPool()))
, maPropMapEntries(getSvxMapProvider().GetMap(SVXMAP_SHAPE))
, mpObj(pObject)
, mpModel(nullptr)
, mpSdrObjectWeakReference(pObject)
, mnLockCount(0)
{
impl_construct();
@@ -194,8 +193,7 @@
, mbIsMultiPropertyCall(false)
, mpPropSet(pPropertySet)
, maPropMapEntries(pEntries)
, mpObj(pObject)
, mpModel(nullptr)
, mpSdrObjectWeakReference(pObject)
, mnLockCount(0)
{
impl_construct();
@@ -208,8 +206,7 @@
, mbIsMultiPropertyCall(false)
, mpPropSet(getSvxMapProvider().GetPropertySet(SVXMAP_SHAPE, SdrObject::GetGlobalDrawObjectItemPool()))
, maPropMapEntries(getSvxMapProvider().GetMap(SVXMAP_SHAPE))
, mpObj(nullptr)
, mpModel(nullptr)
, mpSdrObjectWeakReference(nullptr)
, mnLockCount(0)
{
impl_construct();
@@ -222,19 +219,19 @@
DBG_ASSERT( mnLockCount == 0, "Locked shape was disposed!" );
if ( mpModel )
EndListening( *mpModel );
if ( mpImpl->mpMaster )
mpImpl->mpMaster->dispose();
if ( mpObj.is() )
mpObj->setUnoShape(nullptr);
if ( HasSdrObject() )
{
EndListening(GetSdrObject()->getSdrModelFromSdrObject());
GetSdrObject()->setUnoShape(nullptr);
}
if( HasSdrObjectOwnership() && mpObj.is() )
if( HasSdrObjectOwnership() && HasSdrObject() )
{
mpImpl->mbHasSdrObjectOwnership = false;
SdrObject* pObject = mpObj.get();
SdrObject* pObject = GetSdrObject();
SdrObject::Free( pObject );
}
@@ -248,13 +245,23 @@
}
void SvxShape::InvalidateSdrObject()
{
if(HasSdrObject())
{
EndListening(GetSdrObject()->getSdrModelFromSdrObject());
}
mpSdrObjectWeakReference.reset( nullptr );
};
bool SvxShape::HasSdrObjectOwnership() const
{
if ( !mpImpl->mbHasSdrObjectOwnership )
return false;
OSL_ENSURE( mpObj.is(), "SvxShape::HasSdrObjectOwnership: have the ownership of an object which I don't know!" );
return mpObj.is();
OSL_ENSURE( HasSdrObject(), "SvxShape::HasSdrObjectOwnership: have the ownership of an object which I don't know!" );
return HasSdrObject();
}
@@ -335,40 +342,31 @@
mpImpl->maPropertyNotifier.registerProvider( svx::ShapeProperty::Size,
std::shared_ptr<svx::IPropertyValueProvider>( new ShapeSizeProvider( *mpImpl ) ) );
if ( mpObj.is() )
if ( HasSdrObject() )
{
StartListening(GetSdrObject()->getSdrModelFromSdrObject());
impl_initFromSdrObject();
}
}
void SvxShape::impl_initFromSdrObject()
{
DBG_TESTSOLARMUTEX();
OSL_PRECOND( mpObj.is(), "SvxShape::impl_initFromSdrObject: not to be called without SdrObject!" );
if ( !mpObj.is() )
OSL_PRECOND( HasSdrObject(), "SvxShape::impl_initFromSdrObject: not to be called without SdrObject!" );
if ( !HasSdrObject() )
return;
osl_atomic_increment( &m_refCount );
{
mpObj->setUnoShape(*this);
GetSdrObject()->setUnoShape(*this);
}
osl_atomic_decrement( &m_refCount );
auto pNewModel = mpObj->GetModel();
if (pNewModel != mpModel)
{
if (mpModel)
EndListening( *mpModel );
if (pNewModel)
StartListening( *pNewModel );
mpModel = pNewModel;
}
// #i40944#
// Do not simply return when no model but do the type corrections
// following below.
const SdrInventor nInventor = mpObj->GetObjInventor();
const SdrInventor nInventor = GetSdrObject()->GetObjInventor();
// is it one of ours (svx) ?
if( nInventor == SdrInventor::Default || nInventor == SdrInventor::E3d || nInventor == SdrInventor::FmForm )
@@ -379,7 +377,7 @@
}
else
{
mpImpl->mnObjId = mpObj->GetObjIdentifier();
mpImpl->mnObjId = GetSdrObject()->GetObjIdentifier();
if( nInventor == SdrInventor::E3d )
mpImpl->mnObjId |= E3D_INVENTOR_FLAG;
}
@@ -412,16 +410,20 @@
if ( pCreatedObj == pNewObj )
return;
DBG_ASSERT( pNewObj->GetModel(), "no model for SdrObject?" );
// Correct condition (#i52126#)
mpImpl->mpCreatedObj = pNewObj;
if( mpObj.is() && mpObj->GetModel() )
if( HasSdrObject() )
{
EndListening( *mpObj->GetModel() );
EndListening( GetSdrObject()->getSdrModelFromSdrObject() );
}
mpObj.reset( pNewObj );
mpSdrObjectWeakReference.reset( pNewObj );
if( HasSdrObject() )
{
StartListening( GetSdrObject()->getSdrModelFromSdrObject() );
}
OSL_ENSURE( !mbIsMultiPropertyCall, "SvxShape::Create: hmm?" );
// this was previously set in impl_initFromSdrObject, but I think it was superfluous
@@ -432,63 +434,29 @@
ObtainSettingsFromPropertySet( *mpPropSet );
// save user call
SdrObjUserCall* pUser = mpObj->GetUserCall();
mpObj->SetUserCall(nullptr);
SdrObjUserCall* pUser = GetSdrObject()->GetUserCall();
GetSdrObject()->SetUserCall(nullptr);
setPosition( maPosition );
setSize( maSize );
// restore user call after we set the initial size
mpObj->SetUserCall( pUser );
GetSdrObject()->SetUserCall( pUser );
// if this shape was already named, use this name
if( !maShapeName.isEmpty() )
{
mpObj->SetName( maShapeName );
GetSdrObject()->SetName( maShapeName );
maShapeName.clear();
}
}
void SvxShape::ChangeModel( SdrModel* pNewModel )
{
DBG_TESTSOLARMUTEX();
if( mpObj.is() && mpObj->GetModel() )
{
if( mpObj->GetModel() != pNewModel )
{
EndListening( *mpObj->GetModel() );
}
}
// Always listen to new model (#i52126#)
if( pNewModel )
{
StartListening( *pNewModel );
}
// HACK #i53696# ChangeModel should be virtual, but it isn't. can't change that for 2.0.1
SvxShapeText* pShapeText = dynamic_cast< SvxShapeText* >( this );
if( pShapeText )
{
SvxTextEditSource* pTextEditSource = dynamic_cast< SvxTextEditSource* >( pShapeText->GetEditSource() );
if( pTextEditSource )
pTextEditSource->ChangeModel( pNewModel );
}
mpModel = pNewModel;
if( mpImpl->mpMaster )
mpImpl->mpMaster->modelChanged( pNewModel );
}
void SvxShape::ForceMetricToItemPoolMetric(Pair& rPoint) const throw()
{
DBG_TESTSOLARMUTEX();
if(mpModel)
if(HasSdrObject())
{
MapUnit eMapUnit = mpModel->GetItemPool().GetMetric(0);
MapUnit eMapUnit(GetSdrObject()->getSdrModelFromSdrObject().GetItemPool().GetMetric(0));
if(eMapUnit != MapUnit::Map100thMM)
{
switch(eMapUnit)
@@ -512,9 +480,9 @@
void SvxShape::ForceMetricToItemPoolMetric(basegfx::B2DPolyPolygon& rPolyPolygon) const throw()
{
DBG_TESTSOLARMUTEX();
if(mpModel)
if(HasSdrObject())
{
MapUnit eMapUnit = mpModel->GetItemPool().GetMetric(0);
MapUnit eMapUnit(GetSdrObject()->getSdrModelFromSdrObject().GetItemPool().GetMetric(0));
if(eMapUnit != MapUnit::Map100thMM)
{
switch(eMapUnit)
@@ -542,9 +510,9 @@
{
DBG_TESTSOLARMUTEX();
MapUnit eMapUnit = MapUnit::Map100thMM;
if(mpModel)
if(HasSdrObject())
{
eMapUnit = mpModel->GetItemPool().GetMetric(0);
eMapUnit = GetSdrObject()->getSdrModelFromSdrObject().GetItemPool().GetMetric(0);
if(eMapUnit != MapUnit::Map100thMM)
{
switch(eMapUnit)
@@ -569,9 +537,9 @@
{
DBG_TESTSOLARMUTEX();
MapUnit eMapUnit = MapUnit::Map100thMM;
if(mpModel)
if(HasSdrObject())
{
eMapUnit = mpModel->GetItemPool().GetMetric(0);
eMapUnit = GetSdrObject()->getSdrModelFromSdrObject().GetItemPool().GetMetric(0);
if(eMapUnit != MapUnit::Map100thMM)
{
switch(eMapUnit)
@@ -651,15 +619,15 @@
void SvxShape::ObtainSettingsFromPropertySet(const SvxItemPropertySet& rPropSet)
{
DBG_TESTSOLARMUTEX();
if(mpObj.is() && rPropSet.AreThereOwnUsrAnys() && mpModel)
if(HasSdrObject() && rPropSet.AreThereOwnUsrAnys())
{
SfxItemSet aSet( mpModel->GetItemPool(), svl::Items<SDRATTR_START, SDRATTR_END>{});
SfxItemSet aSet( GetSdrObject()->getSdrModelFromSdrObject().GetItemPool(), svl::Items<SDRATTR_START, SDRATTR_END>{});
Reference< beans::XPropertySet > xShape( static_cast<OWeakObject*>(this), UNO_QUERY );
SvxItemPropertySet_ObtainSettingsFromPropertySet(rPropSet, aSet, xShape, &mpPropSet->getPropertyMap() );
mpObj->SetMergedItemSetAndBroadcast(aSet);
GetSdrObject()->SetMergedItemSetAndBroadcast(aSet);
mpObj->ApplyNotPersistAttr( aSet );
GetSdrObject()->ApplyNotPersistAttr( aSet );
}
}
@@ -668,20 +636,21 @@
DBG_TESTSOLARMUTEX();
uno::Any aAny;
if( !mpObj.is() || mpModel == nullptr || !mpObj->IsInserted() || nullptr == mpObj->GetPage() )
if( !HasSdrObject() || !GetSdrObject()->IsInserted() || nullptr == GetSdrObject()->GetPage() )
return aAny;
ScopedVclPtrInstance< VirtualDevice > pVDev;
pVDev->SetMapMode(MapMode(MapUnit::Map100thMM));
SdrPage* pPage = GetSdrObject()->GetPage();
SdrModel* pModel = mpObj->GetModel();
SdrPage* pPage = mpObj->GetPage();
std::unique_ptr<E3dView> pView(new E3dView( pModel, pVDev.get() ));
std::unique_ptr<E3dView> pView(
new E3dView(
GetSdrObject()->getSdrModelFromSdrObject(),
pVDev.get()));
pView->hideMarkHandles();
SdrPageView* pPageView = pView->ShowSdrPage(pPage);
SdrObject *pTempObj = mpObj.get();
SdrObject *pTempObj = GetSdrObject();
pView->MarkObj(pTempObj,pPageView);
tools::Rectangle aRect(pTempObj->GetCurrentBoundRect());
@@ -1011,7 +980,7 @@
void SvxShape::Notify( SfxBroadcaster&, const SfxHint& rHint ) throw()
{
DBG_TESTSOLARMUTEX();
if( !mpObj.is() )
if( !HasSdrObject() )
return;
// #i55919# SdrHintKind::ObjectChange is only interesting if it's for this object
@@ -1019,13 +988,14 @@
const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint);
if (!pSdrHint ||
((pSdrHint->GetKind() != SdrHintKind::ModelCleared) &&
(pSdrHint->GetKind() != SdrHintKind::ObjectChange || pSdrHint->GetObject() != mpObj.get() )))
(pSdrHint->GetKind() != SdrHintKind::ObjectChange || pSdrHint->GetObject() != GetSdrObject() )))
return;
uno::Reference< uno::XInterface > xSelf( mpObj->getWeakUnoShape() );
uno::Reference< uno::XInterface > xSelf( GetSdrObject()->getWeakUnoShape() );
if( !xSelf.is() )
{
mpObj.reset( nullptr );
EndListening(GetSdrObject()->getSdrModelFromSdrObject());
mpSdrObjectWeakReference.reset( nullptr );
return;
}
@@ -1041,7 +1011,6 @@
case SdrHintKind::ModelCleared:
{
bClearMe = true;
mpModel = nullptr;
break;
}
default:
@@ -1050,13 +1019,30 @@
if( bClearMe )
{
if( !HasSdrObjectOwnership() ) {
if( mpObj.is() )
mpObj->setUnoShape( nullptr );
mpObj.reset( nullptr );
SdrObject* pSdrObject(GetSdrObject());
if(!HasSdrObjectOwnership())
{
if(nullptr != pSdrObject)
{
EndListening(pSdrObject->getSdrModelFromSdrObject());
pSdrObject->setUnoShape(nullptr);
}
mpSdrObjectWeakReference.reset(nullptr);
// SdrModel *is* going down, try to Free SdrObject even
// when !HasSdrObjectOwnership
if(nullptr != pSdrObject && !pSdrObject->IsInserted())
{
SdrObject::Free(pSdrObject);
}
}
if ( !mpImpl->mbDisposing )
if(!mpImpl->mbDisposing)
{
dispose();
}
}
}
@@ -1125,14 +1111,14 @@
{
::SolarMutexGuard aGuard;
if( mpObj.is() && mpModel)
if(HasSdrObject())
{
tools::Rectangle aRect( svx_getLogicRectHack(mpObj.get()) );
tools::Rectangle aRect( svx_getLogicRectHack(GetSdrObject()) );
Point aPt( aRect.Left(), aRect.Top() );
// Position is relative to anchor, so recalc to absolute position
if( mpModel->IsWriter() )
aPt -= mpObj->GetAnchorPos();
if( GetSdrObject()->getSdrModelFromSdrObject().IsWriter() )
aPt -= GetSdrObject()->GetAnchorPos();
ForceMetricTo100th_mm(aPt);
return css::awt::Point( aPt.X(), aPt.Y() );
@@ -1148,25 +1134,25 @@
{
::SolarMutexGuard aGuard;
if( mpObj.is() && mpModel )
if(HasSdrObject())
{
// do NOT move 3D objects, this would change the homogen
// transformation matrix
if(dynamic_cast<const E3dCompoundObject* >(mpObj.get()) == nullptr)
if(dynamic_cast<const E3dCompoundObject* >(GetSdrObject()) == nullptr)
{
tools::Rectangle aRect( svx_getLogicRectHack(mpObj.get()) );
tools::Rectangle aRect( svx_getLogicRectHack(GetSdrObject()) );
Point aLocalPos( Position.X, Position.Y );
ForceMetricToItemPoolMetric(aLocalPos);
// Position is absolute, so recalc to position relative to anchor
if( mpModel->IsWriter() )
aLocalPos += mpObj->GetAnchorPos();
if( GetSdrObject()->getSdrModelFromSdrObject().IsWriter() )
aLocalPos += GetSdrObject()->GetAnchorPos();
long nDX = aLocalPos.X() - aRect.Left();
long nDY = aLocalPos.Y() - aRect.Top();
mpObj->Move( Size( nDX, nDY ) );
mpModel->SetChanged();
GetSdrObject()->Move( Size( nDX, nDY ) );
GetSdrObject()->getSdrModelFromSdrObject().SetChanged();
}
}
@@ -1178,9 +1164,9 @@
{
::SolarMutexGuard aGuard;
if( mpObj.is() && mpModel)
if(HasSdrObject())
{
tools::Rectangle aRect( svx_getLogicRectHack(mpObj.get()) );
tools::Rectangle aRect( svx_getLogicRectHack(GetSdrObject()) );
Size aObjSize( aRect.getWidth(), aRect.getHeight() );
ForceMetricTo100th_mm(aObjSize);
return css::awt::Size( aObjSize.getWidth(), aObjSize.getHeight() );
@@ -1194,26 +1180,26 @@
{
::SolarMutexGuard aGuard;
if( mpObj.is() && mpModel)
if(HasSdrObject())
{
// #i123539# optimization for 3D chart object generation: do not use UNO
// API commands to get the range, this is too expensive since for 3D
// scenes it may recalculate the whole scene since in AOO this depends
// on the contained geometry (layouted to show all content)
const bool b3DConstruction(dynamic_cast< E3dObject* >(mpObj.get()) && mpModel->isLocked());
const bool b3DConstruction(dynamic_cast< E3dObject* >(GetSdrObject()) && GetSdrObject()->getSdrModelFromSdrObject().isLocked());
tools::Rectangle aRect(
b3DConstruction ?
tools::Rectangle(maPosition.X, maPosition.Y, maSize.Width, maSize.Height) :
svx_getLogicRectHack(mpObj.get()) );
svx_getLogicRectHack(GetSdrObject()) );
Size aLocalSize( rSize.Width, rSize.Height );
ForceMetricToItemPoolMetric(aLocalSize);
if(mpObj->GetObjInventor() == SdrInventor::Default && mpObj->GetObjIdentifier() == OBJ_MEASURE )
if(GetSdrObject()->GetObjInventor() == SdrInventor::Default && GetSdrObject()->GetObjIdentifier() == OBJ_MEASURE )
{
Fraction aWdt(aLocalSize.Width(),aRect.Right()-aRect.Left());
Fraction aHgt(aLocalSize.Height(),aRect.Bottom()-aRect.Top());
Point aPt = mpObj->GetSnapRect().TopLeft();
mpObj->Resize(aPt,aWdt,aHgt);
Point aPt = GetSdrObject()->GetSnapRect().TopLeft();
GetSdrObject()->Resize(aPt,aWdt,aHgt);
}
else
{
@@ -1231,10 +1217,10 @@
else
aRect.setHeight(aLocalSize.Height());
svx_setLogicRectHack( mpObj.get(), aRect );
svx_setLogicRectHack( GetSdrObject(), aRect );
}
mpModel->SetChanged();
GetSdrObject()->getSdrModelFromSdrObject().SetChanged();
}
maSize = rSize;
}
@@ -1244,9 +1230,9 @@
OUString SAL_CALL SvxShape::getName( )
{
::SolarMutexGuard aGuard;
if( mpObj.is() )
if( HasSdrObject() )
{
return mpObj->GetName();
return GetSdrObject()->GetName();
}
else
{
@@ -1258,9 +1244,9 @@
void SAL_CALL SvxShape::setName( const OUString& aName )
{
::SolarMutexGuard aGuard;
if( mpObj.is() )
if( HasSdrObject() )
{
mpObj->SetName( aName );
GetSdrObject()->SetName( aName );
}
else
{
@@ -1296,47 +1282,42 @@
mpImpl->maDisposeListeners.disposeAndClear(aEvt);
mpImpl->maPropertyNotifier.disposing();
if ( mpObj.is() )
if ( HasSdrObject() )
{
EndListening( GetSdrObject()->getSdrModelFromSdrObject() );
bool bFreeSdrObject = false;
if ( mpObj->IsInserted() && mpObj->GetPage() )
if ( GetSdrObject()->IsInserted() && GetSdrObject()->GetPage() )
{
OSL_ENSURE( HasSdrObjectOwnership(), "SvxShape::dispose: is the below code correct?" );
// normally, we are allowed to free the SdrObject only if we have its ownership.
// Why isn't this checked here?
SdrPage* pPage = mpObj->GetPage();
SdrPage* pPage = GetSdrObject()->GetPage();
// delete the SdrObject from the page
const size_t nCount = pPage->GetObjCount();
for ( size_t nNum = 0; nNum < nCount; ++nNum )
{
if ( pPage->GetObj( nNum ) == mpObj.get() )
if ( pPage->GetObj( nNum ) == GetSdrObject() )
{
OSL_VERIFY( pPage->RemoveObject( nNum ) == mpObj.get() );
OSL_VERIFY( pPage->RemoveObject( nNum ) == GetSdrObject() );
bFreeSdrObject = true;
break;
}
}
}
mpObj->setUnoShape(nullptr);
GetSdrObject()->setUnoShape(nullptr);
if ( bFreeSdrObject )
{
// in case we have the ownership of the SdrObject, a Free
// would do nothing. So ensure the ownership is reset.
mpImpl->mbHasSdrObjectOwnership = false;
SdrObject* pObject = mpObj.get();
SdrObject* pObject = GetSdrObject();
SdrObject::Free( pObject );
}
}
if( mpModel )
{
EndListening( *mpModel );
mpModel = nullptr;
}
}
@@ -1402,19 +1383,20 @@
bool SvxShape::SetFillAttribute( sal_uInt16 nWID, const OUString& rName )
{
SfxItemSet aSet( mpModel->GetItemPool(), {{nWID, nWID}} );
if( SetFillAttribute( nWID, rName, aSet, mpModel ) )
if(HasSdrObject())
{
//mpObj->SetItemSetAndBroadcast(aSet);
mpObj->SetMergedItemSetAndBroadcast(aSet);
SfxItemSet aSet( GetSdrObject()->getSdrModelFromSdrObject().GetItemPool(), {{nWID, nWID}} );
return true;
if( SetFillAttribute( nWID, rName, aSet, &GetSdrObject()->getSdrModelFromSdrObject() ) )
{
//GetSdrObject()->SetItemSetAndBroadcast(aSet);
GetSdrObject()->SetMergedItemSetAndBroadcast(aSet);
return true;
}
}
else
{
return false;
}
return false;
}
@@ -1597,7 +1579,7 @@
const SfxItemPropertySimpleEntry* pMap = mpPropSet->getPropertyMapEntry(rPropertyName);
if (!mpObj.is() || !mpModel)
if (!HasSdrObject())
{
// Since we have no actual sdr object right now, remember all
// properties in a list. These properties will be set when the sdr
@@ -1612,6 +1594,7 @@
// supported after creation.
mpPropSet->setPropertyValue( pMap, rVal );
}
return;
}
@@ -1626,7 +1609,7 @@
"Readonly property can't be set: " + rPropertyName,
uno::Reference<drawing::XShape>(this));
mpModel->SetChanged();
GetSdrObject()->getSdrModelFromSdrObject().SetChanged();
if (setPropertyValueImpl(rPropertyName, pMap, rVal))
return;
@@ -1648,7 +1631,7 @@
{
if( mpImpl->mpItemSet == nullptr )
{
pSet = mpImpl->mpItemSet = mpObj->GetMergedItemSet().Clone();
pSet = mpImpl->mpItemSet = GetSdrObject()->GetMergedItemSet().Clone();
}
else
{
@@ -1657,11 +1640,11 @@
}
else
{
pSet = new SfxItemSet( mpModel->GetItemPool(), {{pMap->nWID, pMap->nWID}});
pSet = new SfxItemSet( GetSdrObject()->getSdrModelFromSdrObject().GetItemPool(), {{pMap->nWID, pMap->nWID}});
}
if( pSet->GetItemState( pMap->nWID ) != SfxItemState::SET )
pSet->Put(mpObj->GetMergedItem(pMap->nWID));
pSet->Put(GetSdrObject()->GetMergedItem(pMap->nWID));
if( !SvxUnoTextRangeBase::SetPropertyValueHelper( pMap, rVal, *pSet ))
{
@@ -1670,7 +1653,7 @@
if(bIsNotPersist)
{
// not-persistent attribute, get those extra
mpObj->TakeNotPersistAttr(*pSet);
GetSdrObject()->TakeNotPersistAttr(*pSet);
}
}
@@ -1678,7 +1661,7 @@
{
// get default from ItemPool
if(SfxItemPool::IsWhich(pMap->nWID))
pSet->Put(mpModel->GetItemPool().GetDefaultItem(pMap->nWID));
pSet->Put(GetSdrObject()->getSdrModelFromSdrObject().GetItemPool().GetDefaultItem(pMap->nWID));
}
if( pSet->GetItemState( pMap->nWID ) == SfxItemState::SET )
@@ -1690,7 +1673,7 @@
if(bIsNotPersist)
{
// set not-persistent attribute extra
mpObj->ApplyNotPersistAttr( *pSet );
GetSdrObject()->ApplyNotPersistAttr( *pSet );
delete pSet;
}
else
@@ -1699,7 +1682,7 @@
// will be set in setPropertyValues later
if( !mbIsMultiPropertyCall )
{
mpObj->SetMergedItemSetAndBroadcast( *pSet );
GetSdrObject()->SetMergedItemSetAndBroadcast( *pSet );
delete pSet;
}
@@ -1723,7 +1706,7 @@
const SfxItemPropertySimpleEntry* pMap = mpPropSet->getPropertyMapEntry(PropertyName);
uno::Any aAny;
if( mpObj.is() && mpModel )
if(HasSdrObject())
{
if(pMap == nullptr )
throw beans::UnknownPropertyException( PropertyName, static_cast<cppu::OWeakObject*>(this));
@@ -1733,8 +1716,8 @@
DBG_ASSERT( pMap->nWID == SDRATTR_TEXTDIRECTION || (pMap->nWID < SDRATTR_NOTPERSIST_FIRST || pMap->nWID > SDRATTR_NOTPERSIST_LAST), "Not persist item not handled!" );
DBG_ASSERT( pMap->nWID < OWN_ATTR_VALUE_START || pMap->nWID > OWN_ATTR_VALUE_END, "Not item property not handled!" );
SfxItemSet aSet( mpModel->GetItemPool(), {{pMap->nWID, pMap->nWID}});
aSet.Put(mpObj->GetMergedItem(pMap->nWID));
SfxItemSet aSet( GetSdrObject()->getSdrModelFromSdrObject().GetItemPool(), {{pMap->nWID, pMap->nWID}});
aSet.Put(GetSdrObject()->GetMergedItem(pMap->nWID));
if(SvxUnoTextRangeBase::GetPropertyValueHelper( aSet, pMap, aAny ))
return aAny;
@@ -1744,7 +1727,7 @@
if(pMap->nWID >= SDRATTR_NOTPERSIST_FIRST && pMap->nWID <= SDRATTR_NOTPERSIST_LAST)
{
// not-persistent attribute, get those extra
mpObj->TakeNotPersistAttr(aSet);
GetSdrObject()->TakeNotPersistAttr(aSet);
}
}
@@ -1752,7 +1735,7 @@
{
// get default from ItemPool
if(SfxItemPool::IsWhich(pMap->nWID))
aSet.Put(mpModel->GetItemPool().GetDefaultItem(pMap->nWID));
aSet.Put(GetSdrObject()->getSdrModelFromSdrObject().GetItemPool().GetDefaultItem(pMap->nWID));
}
if(aSet.Count())
@@ -1817,8 +1800,8 @@
}
}
if( mpImpl->mpItemSet && mpObj.is() )
mpObj->SetMergedItemSetAndBroadcast( *mpImpl->mpItemSet );
if( mpImpl->mpItemSet && HasSdrObject() )
GetSdrObject()->SetMergedItemSetAndBroadcast( *mpImpl->mpItemSet );
}
@@ -1920,10 +1903,10 @@
case SDRATTR_CIRCKIND:
{
if( mpObj->GetObjInventor() == SdrInventor::Default)
if( GetSdrObject()->GetObjInventor() == SdrInventor::Default)
{
drawing::CircleKind eKind;
switch(mpObj->GetObjIdentifier())
switch(GetSdrObject()->GetObjIdentifier())
{
case OBJ_CIRC: // circle, ellipse
eKind = drawing::CircleKind_FULL;
@@ -1988,13 +1971,13 @@
const SfxItemPropertySimpleEntry* pMap = mpPropSet->getPropertyMapEntry(PropertyName);
if( !mpObj.is() || pMap == nullptr )
if( !HasSdrObject() || pMap == nullptr )
throw beans::UnknownPropertyException( PropertyName, static_cast<cppu::OWeakObject*>(this));
beans::PropertyState eState;
if( !getPropertyStateImpl( pMap, eState ) )
{
const SfxItemSet& rSet = mpObj->GetMergedItemSet();
const SfxItemSet& rSet = GetSdrObject()->GetMergedItemSet();
switch( rSet.GetItemState( pMap->nWID, false ) )
{
@@ -2063,7 +2046,7 @@
// #90763# position is relative to top left, make it absolute
basegfx::B2DPolyPolygon aNewPolyPolygon;
basegfx::B2DHomMatrix aNewHomogenMatrix;
mpObj->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
GetSdrObject()->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
aVclPoint.AdjustX(basegfx::fround(aNewHomogenMatrix.get(0, 2)) );
aVclPoint.AdjustY(basegfx::fround(aNewHomogenMatrix.get(1, 2)) );
@@ -2072,12 +2055,12 @@
ForceMetricToItemPoolMetric(aVclPoint);
// #88491# position relative to anchor
if( mpModel->IsWriter() )
if( GetSdrObject()->getSdrModelFromSdrObject().IsWriter() )
{
aVclPoint += mpObj->GetAnchorPos();
aVclPoint += GetSdrObject()->GetAnchorPos();
}
static_cast<SdrCaptionObj*>(mpObj.get())->SetTailPos(aVclPoint);
static_cast<SdrCaptionObj*>(GetSdrObject())->SetTailPos(aVclPoint);
return true;
}
@@ -2091,7 +2074,7 @@
basegfx::B2DPolyPolygon aNewPolyPolygon;
basegfx::B2DHomMatrix aNewHomogenMatrix;
mpObj->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
GetSdrObject()->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
aNewHomogenMatrix.set(0, 0, aMatrix.Line1.Column1);
aNewHomogenMatrix.set(0, 1, aMatrix.Line1.Column2);
@@ -2103,7 +2086,7 @@
aNewHomogenMatrix.set(2, 1, aMatrix.Line3.Column2);
aNewHomogenMatrix.set(2, 2, aMatrix.Line3.Column3);
mpObj->TRSetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
GetSdrObject()->TRSetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
return true;
}
break;
@@ -2114,12 +2097,12 @@
sal_Int32 nNewOrdNum = 0;
if(rValue >>= nNewOrdNum)
{
SdrObjList* pObjList = mpObj->GetObjList();
SdrObjList* pObjList = GetSdrObject()->GetObjList();
if( pObjList )
{
SdrObject* pCheck =
pObjList->SetObjectOrdNum( mpObj->GetOrdNum(), static_cast<size_t>(nNewOrdNum) );
DBG_ASSERT( pCheck == mpObj.get(), "GetOrdNum() failed!" );
pObjList->SetObjectOrdNum( GetSdrObject()->GetOrdNum(), static_cast<size_t>(nNewOrdNum) );
DBG_ASSERT( pCheck == GetSdrObject(), "GetOrdNum() failed!" );
}
return true;
}
@@ -2137,7 +2120,7 @@
tools::Rectangle aRect;
aRect.SetPos(aTopLeft);
aRect.SetSize(aObjSize);
mpObj->SetSnapRect(aRect);
GetSdrObject()->SetSnapRect(aRect);
return true;
}
break;
@@ -2147,7 +2130,7 @@
bool bMirror;
if(rValue >>= bMirror )
{
SdrGrafObj* pObj = dynamic_cast< SdrGrafObj* >( mpObj.get() );
SdrGrafObj* pObj = dynamic_cast< SdrGrafObj* >( GetSdrObject() );
if( pObj )
pObj->SetMirrored(bMirror);
return true;
@@ -2162,7 +2145,7 @@
case OWN_ATTR_EDGE_END_POS:
case OWN_ATTR_EDGE_POLYPOLYGONBEZIER:
{
SdrEdgeObj* pEdgeObj = dynamic_cast< SdrEdgeObj* >(mpObj.get());
SdrEdgeObj* pEdgeObj = dynamic_cast< SdrEdgeObj* >(GetSdrObject());
if(pEdgeObj)
{
switch(pProperty->nWID)
@@ -2196,8 +2179,8 @@
// perform metric change before applying anchor position,
// because the anchor position is in pool metric.
ForceMetricToItemPoolMetric( aPoint );
if( mpModel->IsWriter() )
aPoint += mpObj->GetAnchorPos();
if( GetSdrObject()->getSdrModelFromSdrObject().IsWriter() )
aPoint += GetSdrObject()->GetAnchorPos();
pEdgeObj->SetTailPoint( pProperty->nWID == OWN_ATTR_EDGE_START_POS, aPoint );
return true;
@@ -2238,9 +2221,9 @@
{
// Reintroduction of fix for issue i59051 (#i108851#)
ForceMetricToItemPoolMetric( aNewPolyPolygon );
if( mpModel->IsWriter() )
if( GetSdrObject()->getSdrModelFromSdrObject().IsWriter() )
{
Point aPoint( mpObj->GetAnchorPos() );
Point aPoint( GetSdrObject()->GetAnchorPos() );
aNewPolyPolygon.transform(basegfx::utils::createTranslateB2DHomMatrix(aPoint.X(), aPoint.Y()));
}
pEdgeObj->SetEdgeTrackPath( aNewPolyPolygon );
@@ -2254,7 +2237,7 @@
case OWN_ATTR_MEASURE_START_POS:
case OWN_ATTR_MEASURE_END_POS:
{
SdrMeasureObj* pMeasureObj = dynamic_cast< SdrMeasureObj* >(mpObj.get());
SdrMeasureObj* pMeasureObj = dynamic_cast< SdrMeasureObj* >(GetSdrObject());
awt::Point aUnoPoint;
if(pMeasureObj && ( rValue >>= aUnoPoint ) )
{
@@ -2262,8 +2245,8 @@
// Reintroduction of fix for issue #i59051# (#i108851#)
ForceMetricToItemPoolMetric( aPoint );
if( mpModel->IsWriter() )
aPoint += mpObj->GetAnchorPos();
if( GetSdrObject()->getSdrModelFromSdrObject().IsWriter() )
aPoint += GetSdrObject()->GetAnchorPos();
pMeasureObj->NbcSetPoint( aPoint, pProperty->nWID == OWN_ATTR_MEASURE_START_POS ? 0 : 1 );
pMeasureObj->SetChanged();
@@ -2283,8 +2266,8 @@
eMode = static_cast<drawing::BitmapMode>(nMode);
}
mpObj->SetMergedItem( XFillBmpStretchItem( eMode == drawing::BitmapMode_STRETCH ) );
mpObj->SetMergedItem( XFillBmpTileItem( eMode == drawing::BitmapMode_REPEAT ) );
GetSdrObject()->SetMergedItem( XFillBmpStretchItem( eMode == drawing::BitmapMode_STRETCH ) );
GetSdrObject()->SetMergedItem( XFillBmpTileItem( eMode == drawing::BitmapMode_REPEAT ) );
return true;
}
@@ -2293,10 +2276,10 @@
sal_Int16 nLayerId = sal_Int16();
if( rValue >>= nLayerId )
{
SdrLayer* pLayer = mpModel->GetLayerAdmin().GetLayerPerID(SdrLayerID(nLayerId));
SdrLayer* pLayer = GetSdrObject()->getSdrModelFromSdrObject().GetLayerAdmin().GetLayerPerID(SdrLayerID(nLayerId));
if( pLayer )
{
mpObj->SetLayer(SdrLayerID(nLayerId));
GetSdrObject()->SetLayer(SdrLayerID(nLayerId));
return true;
}
}
@@ -2308,10 +2291,10 @@
OUString aLayerName;
if( rValue >>= aLayerName )
{
const SdrLayer* pLayer=mpModel->GetLayerAdmin().GetLayer(aLayerName);
const SdrLayer* pLayer = GetSdrObject()->getSdrModelFromSdrObject().GetLayerAdmin().GetLayer(aLayerName);
if( pLayer != nullptr )
{
mpObj->SetLayer( pLayer->GetID() );
GetSdrObject()->SetLayer( pLayer->GetID() );
return true;
}
}
@@ -2322,13 +2305,13 @@
sal_Int32 nAngle = 0;
if( rValue >>= nAngle )
{
Point aRef1(mpObj->GetSnapRect().Center());
nAngle -= mpObj->GetRotateAngle();
Point aRef1(GetSdrObject()->GetSnapRect().Center());
nAngle -= GetSdrObject()->GetRotateAngle();
if (nAngle!=0)
{
double nSin=sin(nAngle*nPi180);
double nCos=cos(nAngle*nPi180);
mpObj->Rotate(aRef1,nAngle,nSin,nCos);
GetSdrObject()->Rotate(aRef1,nAngle,nSin,nCos);
}
return true;
}
@@ -2341,12 +2324,12 @@
sal_Int32 nShear = 0;
if( rValue >>= nShear )
{
nShear -= mpObj->GetShearAngle();
nShear -= GetSdrObject()->GetShearAngle();
if(nShear != 0 )
{
Point aRef1(mpObj->GetSnapRect().Center());
Point aRef1(GetSdrObject()->GetSnapRect().Center());
double nTan=tan(nShear*nPi180);
mpObj->Shear(aRef1,nShear,nTan,false);
GetSdrObject()->Shear(aRef1,nShear,nTan,false);
return true;
}
}
@@ -2356,7 +2339,7 @@
case OWN_ATTR_INTEROPGRABBAG:
{
mpObj->SetGrabBagItem(rValue);
GetSdrObject()->SetGrabBagItem(rValue);
return true;
}
@@ -2365,7 +2348,7 @@
bool bMoveProtect;
if( rValue >>= bMoveProtect )
{
mpObj->SetMoveProtect(bMoveProtect);
GetSdrObject()->SetMoveProtect(bMoveProtect);
return true;
}
break;
@@ -2375,7 +2358,7 @@
OUString aName;
if( rValue >>= aName )
{
mpObj->SetName( aName );
GetSdrObject()->SetName( aName );
return true;
}
break;
@@ -2387,7 +2370,7 @@
OUString aTitle;
if( rValue >>= aTitle )
{
mpObj->SetTitle( aTitle );
GetSdrObject()->SetTitle( aTitle );
return true;
}
break;
@@ -2397,7 +2380,7 @@
OUString aDescription;
if( rValue >>= aDescription )
{
mpObj->SetDescription( aDescription );
GetSdrObject()->SetDescription( aDescription );
return true;
}
break;
@@ -2408,7 +2391,7 @@
bool bPrintable;
if( rValue >>= bPrintable )
{
mpObj->SetPrintable(bPrintable);
GetSdrObject()->SetPrintable(bPrintable);
return true;
}
break;
@@ -2418,7 +2401,7 @@
bool bVisible;
if( rValue >>= bVisible )
{
mpObj->SetVisible(bVisible);
GetSdrObject()->SetVisible(bVisible);
return true;
}
break;
@@ -2428,7 +2411,7 @@
bool bResizeProtect;
if( rValue >>= bResizeProtect )
{
mpObj->SetResizeProtect(bResizeProtect);
GetSdrObject()->SetResizeProtect(bResizeProtect);
return true;
}
break;
@@ -2438,19 +2421,16 @@
sal_Int32 nPageNum = 0;
if( (rValue >>= nPageNum) && ( nPageNum >= 0 ) && ( nPageNum <= 0xffff ) )
{
SdrPageObj* pPageObj = dynamic_cast< SdrPageObj* >(mpObj.get());
SdrPageObj* pPageObj = dynamic_cast< SdrPageObj* >(GetSdrObject());
if( pPageObj )
{
SdrModel* pModel = pPageObj->GetModel();
SdrModel& rModel(pPageObj->getSdrModelFromSdrObject());
SdrPage* pNewPage = nullptr;
const sal_uInt16 nDestinationPageNum(static_cast<sal_uInt16>((nPageNum << 1) - 1));
if(pModel)
if(nDestinationPageNum < rModel.GetPageCount())
{
if(nDestinationPageNum < pModel->GetPageCount())
{
pNewPage = pModel->GetPage(nDestinationPageNum);
}
pNewPage = rModel.GetPage(nDestinationPageNum);
}
pPageObj->SetReferencedPage(pNewPage);
@@ -2498,12 +2478,12 @@
{
case OWN_ATTR_CAPTION_POINT:
{
Point aVclPoint = static_cast<SdrCaptionObj*>(mpObj.get())->GetTailPos();
Point aVclPoint = static_cast<SdrCaptionObj*>(GetSdrObject())->GetTailPos();
// #88491# make pos relative to anchor
if( mpModel->IsWriter() )
if( GetSdrObject()->getSdrModelFromSdrObject().IsWriter() )
{
aVclPoint -= mpObj->GetAnchorPos();
aVclPoint -= GetSdrObject()->GetAnchorPos();
}
// #88657# metric of pool maybe twips (writer)
@@ -2512,7 +2492,7 @@
// #90763# pos is absolute, make it relative to top left
basegfx::B2DPolyPolygon aNewPolyPolygon;
basegfx::B2DHomMatrix aNewHomogenMatrix;
mpObj->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
GetSdrObject()->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
aVclPoint.AdjustX( -(basegfx::fround(aNewHomogenMatrix.get(0, 2))) );
aVclPoint.AdjustY( -(basegfx::fround(aNewHomogenMatrix.get(1, 2))) );
@@ -2526,7 +2506,7 @@
{
basegfx::B2DPolyPolygon aNewPolyPolygon;
basegfx::B2DHomMatrix aNewHomogenMatrix;
mpObj->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
GetSdrObject()->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
drawing::HomogenMatrix3 aMatrix;
aMatrix.Line1.Column1 = aNewHomogenMatrix.get(0, 0);
@@ -2546,7 +2526,7 @@
case OWN_ATTR_ZORDER:
{
rValue <<= static_cast<sal_Int32>(mpObj->GetOrdNum());
rValue <<= static_cast<sal_Int32>(GetSdrObject()->GetOrdNum());
break;
}
@@ -2561,13 +2541,13 @@
case OWN_ATTR_ISFONTWORK:
{
rValue <<= dynamic_cast<const SdrTextObj*>(mpObj.get()) != nullptr && static_cast<SdrTextObj*>(mpObj.get())->IsFontwork();
rValue <<= dynamic_cast<const SdrTextObj*>(GetSdrObject()) != nullptr && static_cast<SdrTextObj*>(GetSdrObject())->IsFontwork();
break;
}
case OWN_ATTR_FRAMERECT:
{
tools::Rectangle aRect( mpObj->GetSnapRect() );
tools::Rectangle aRect( GetSdrObject()->GetSnapRect() );
Point aTopLeft( aRect.TopLeft() );
Size aObjSize( aRect.GetWidth(), aRect.GetHeight() );
ForceMetricTo100th_mm(aTopLeft);
@@ -2581,7 +2561,7 @@
case OWN_ATTR_BOUNDRECT:
{
tools::Rectangle aRect( mpObj->GetCurrentBoundRect() );
tools::Rectangle aRect( GetSdrObject()->GetCurrentBoundRect() );
Point aTopLeft( aRect.TopLeft() );
Size aObjSize( aRect.GetWidth(), aRect.GetHeight() );
ForceMetricTo100th_mm(aTopLeft);
@@ -2595,7 +2575,7 @@
case OWN_ATTR_LDNAME:
{
OUString aName( mpObj->GetName() );
OUString aName( GetSdrObject()->GetName() );
rValue <<= aName;
break;
}
@@ -2603,11 +2583,11 @@
case OWN_ATTR_LDBITMAP:
{
OUString sId;
if( mpObj->GetObjInventor() == SdrInventor::Default && mpObj->GetObjIdentifier() == OBJ_OLE2 )
if( GetSdrObject()->GetObjInventor() == SdrInventor::Default && GetSdrObject()->GetObjIdentifier() == OBJ_OLE2 )
{
sId = RID_UNODRAW_OLE2;
}
else if( mpObj->GetObjInventor() == SdrInventor::Default && mpObj->GetObjIdentifier() == OBJ_GRAF )
else if( GetSdrObject()->GetObjInventor() == SdrInventor::Default && GetSdrObject()->GetObjIdentifier() == OBJ_GRAF )
{
sId = RID_UNODRAW_GRAPHICS;
}
@@ -2626,8 +2606,8 @@
case OWN_ATTR_MIRRORED:
{
bool bMirror = false;
if( mpObj.is() && dynamic_cast<const SdrGrafObj*>(mpObj.get()) != nullptr )
bMirror = static_cast<SdrGrafObj*>(mpObj.get())->IsMirrored();
if( HasSdrObject() && dynamic_cast<const SdrGrafObj*>(GetSdrObject()) != nullptr )
bMirror = static_cast<SdrGrafObj*>(GetSdrObject())->IsMirrored();
rValue <<= bMirror;
break;
@@ -2641,7 +2621,7 @@
case OWN_ATTR_GLUEID_TAIL:
case OWN_ATTR_EDGE_POLYPOLYGONBEZIER:
{
SdrEdgeObj* pEdgeObj = dynamic_cast<SdrEdgeObj*>(mpObj.get());
SdrEdgeObj* pEdgeObj = dynamic_cast<SdrEdgeObj*>(GetSdrObject());
if(pEdgeObj)
{
switch(pProperty->nWID)
@@ -2664,8 +2644,8 @@
case OWN_ATTR_EDGE_END_POS:
{
Point aPoint( pEdgeObj->GetTailPoint( pProperty->nWID == OWN_ATTR_EDGE_START_POS ) );
if( mpModel->IsWriter() )
aPoint -= mpObj->GetAnchorPos();
if( GetSdrObject()->getSdrModelFromSdrObject().IsWriter() )
aPoint -= GetSdrObject()->GetAnchorPos();
ForceMetricTo100th_mm( aPoint );
awt::Point aUnoPoint( aPoint.X(), aPoint.Y() );
@@ -2682,9 +2662,9 @@
case OWN_ATTR_EDGE_POLYPOLYGONBEZIER:
{
basegfx::B2DPolyPolygon aPolyPoly( pEdgeObj->GetEdgeTrackPath() );
if( mpModel->IsWriter() )
if( GetSdrObject()->getSdrModelFromSdrObject().IsWriter() )
{
Point aPoint( mpObj->GetAnchorPos() );
Point aPoint( GetSdrObject()->GetAnchorPos() );
aPolyPoly.transform(basegfx::utils::createTranslateB2DHomMatrix(-aPoint.X(), -aPoint.Y()));
}
// Reintroduction of fix for issue #i59051# (#i108851#)
@@ -2702,12 +2682,12 @@
case OWN_ATTR_MEASURE_START_POS:
case OWN_ATTR_MEASURE_END_POS:
{
SdrMeasureObj* pMeasureObj = dynamic_cast<SdrMeasureObj*>(mpObj.get());
SdrMeasureObj* pMeasureObj = dynamic_cast<SdrMeasureObj*>(GetSdrObject());
if(pMeasureObj)
{
Point aPoint( pMeasureObj->GetPoint( pProperty->nWID == OWN_ATTR_MEASURE_START_POS ? 0 : 1 ) );
if( mpModel->IsWriter() )
aPoint -= mpObj->GetAnchorPos();
if( GetSdrObject()->getSdrModelFromSdrObject().IsWriter() )
aPoint -= GetSdrObject()->GetAnchorPos();
// Reintroduction of fix for issue #i59051# (#i108851#)
ForceMetricTo100th_mm( aPoint );
@@ -2721,7 +2701,7 @@
case OWN_ATTR_FILLBMP_MODE:
{
const SfxItemSet& rObjItemSet = mpObj->GetMergedItemSet();
const SfxItemSet& rObjItemSet = GetSdrObject()->GetMergedItemSet();
const XFillBmpStretchItem* pStretchItem = &rObjItemSet.Get(XATTR_FILLBMP_STRETCH);
const XFillBmpTileItem* pTileItem = &rObjItemSet.Get(XATTR_FILLBMP_TILE);
@@ -2741,12 +2721,12 @@
break;
}
case SDRATTR_LAYERID:
rValue <<= sal_uInt16(sal_uInt8(mpObj->GetLayer()));
rValue <<= sal_uInt16(sal_uInt8(GetSdrObject()->GetLayer()));
break;
case SDRATTR_LAYERNAME:
{
SdrLayer* pLayer = mpModel->GetLayerAdmin().GetLayerPerID(mpObj->GetLayer());
SdrLayer* pLayer = GetSdrObject()->getSdrModelFromSdrObject().GetLayerAdmin().GetLayerPerID(GetSdrObject()->GetLayer());
if( pLayer )
{
OUString aName( pLayer->GetName() );
@@ -2756,26 +2736,26 @@
}
case SDRATTR_ROTATEANGLE:
rValue <<= static_cast<sal_Int32>(mpObj->GetRotateAngle());
rValue <<= static_cast<sal_Int32>(GetSdrObject()->GetRotateAngle());
break;
case SDRATTR_SHEARANGLE:
rValue <<= static_cast<sal_Int32>(mpObj->GetShearAngle());
rValue <<= static_cast<sal_Int32>(GetSdrObject()->GetShearAngle());
break;
case OWN_ATTR_INTEROPGRABBAG:
{
mpObj->GetGrabBagItem(rValue);
GetSdrObject()->GetGrabBagItem(rValue);
break;
}
case SDRATTR_OBJMOVEPROTECT:
rValue <<= mpObj->IsMoveProtect();
rValue <<= GetSdrObject()->IsMoveProtect();
break;
case SDRATTR_OBJECTNAME:
{
OUString aName( mpObj->GetName() );
OUString aName( GetSdrObject()->GetName() );
rValue <<= aName;
break;
}
@@ -2783,33 +2763,33 @@
// #i68101#
case OWN_ATTR_MISC_OBJ_TITLE:
{
OUString aTitle( mpObj->GetTitle() );
OUString aTitle( GetSdrObject()->GetTitle() );
rValue <<= aTitle;
break;
}
case OWN_ATTR_MISC_OBJ_DESCRIPTION:
{
OUString aDescription( mpObj->GetDescription() );
OUString aDescription( GetSdrObject()->GetDescription() );
rValue <<= aDescription;
break;
}
case SDRATTR_OBJPRINTABLE:
rValue <<= mpObj->IsPrintable();
rValue <<= GetSdrObject()->IsPrintable();
break;
case SDRATTR_OBJVISIBLE:
rValue <<= mpObj->IsVisible();
rValue <<= GetSdrObject()->IsVisible();
break;
case SDRATTR_OBJSIZEPROTECT:
rValue <<= mpObj->IsResizeProtect();
rValue <<= GetSdrObject()->IsResizeProtect();
break;
case OWN_ATTR_PAGE_NUMBER:
{
SdrPageObj* pPageObj = dynamic_cast<SdrPageObj*>(mpObj.get());
SdrPageObj* pPageObj = dynamic_cast<SdrPageObj*>(GetSdrObject());
if(pPageObj)
{
SdrPage* pPage = pPageObj->GetReferencedPage();
@@ -2823,18 +2803,18 @@
case OWN_ATTR_UINAME_SINGULAR:
{
rValue <<= mpObj->TakeObjNameSingul();
rValue <<= GetSdrObject()->TakeObjNameSingul();
break;
}
case OWN_ATTR_UINAME_PLURAL:
{
rValue <<= mpObj->TakeObjNamePlural();
rValue <<= GetSdrObject()->TakeObjNamePlural();
break;
}
case OWN_ATTR_METAFILE:
{
SdrOle2Obj* pObj = dynamic_cast<SdrOle2Obj*>(mpObj.get());
SdrOle2Obj* pObj = dynamic_cast<SdrOle2Obj*>(GetSdrObject());
if( pObj )
{
const Graphic* pGraphic = pObj->GetGraphic();
@@ -2883,7 +2863,7 @@
{
if( pProperty->nWID == OWN_ATTR_FILLBMP_MODE )
{
const SfxItemSet& rSet = mpObj->GetMergedItemSet();
const SfxItemSet& rSet = GetSdrObject()->GetMergedItemSet();
if( rSet.GetItemState( XATTR_FILLBMP_STRETCH, false ) == SfxItemState::SET ||
rSet.GetItemState( XATTR_FILLBMP_TILE, false ) == SfxItemState::SET )
@@ -2913,8 +2893,8 @@
{
if( pProperty->nWID == OWN_ATTR_FILLBMP_MODE )
{
mpObj->ClearMergedItem( XATTR_FILLBMP_STRETCH );
mpObj->ClearMergedItem( XATTR_FILLBMP_TILE );
GetSdrObject()->ClearMergedItem( XATTR_FILLBMP_STRETCH );
GetSdrObject()->ClearMergedItem( XATTR_FILLBMP_TILE );
return true;
}
else if((pProperty->nWID >= OWN_ATTR_VALUE_START && pProperty->nWID <= OWN_ATTR_VALUE_END ) ||
@@ -2962,15 +2942,15 @@
const SfxItemPropertySimpleEntry* pProperty = mpPropSet->getPropertyMapEntry(PropertyName);
if( !mpObj.is() || mpModel == nullptr || pProperty == nullptr )
if( !HasSdrObject() || pProperty == nullptr )
throw beans::UnknownPropertyException( PropertyName, static_cast<cppu::OWeakObject*>(this));
if( !setPropertyToDefaultImpl( pProperty ) )
{
mpObj->ClearMergedItem( pProperty->nWID );
GetSdrObject()->ClearMergedItem( pProperty->nWID );
}
mpModel->SetChanged();
GetSdrObject()->getSdrModelFromSdrObject().SetChanged();
}
@@ -2992,7 +2972,7 @@
const SfxItemPropertySimpleEntry* pMap = mpPropSet->getPropertyMapEntry(aPropertyName);
if( !mpObj.is() || pMap == nullptr || mpModel == nullptr )
if( !HasSdrObject() || pMap == nullptr )
throw beans::UnknownPropertyException( aPropertyName, static_cast<cppu::OWeakObject*>(this));
if(( pMap->nWID >= OWN_ATTR_VALUE_START && pMap->nWID <= OWN_ATTR_VALUE_END ) ||
@@ -3005,8 +2985,8 @@
if(!SfxItemPool::IsWhich(pMap->nWID))
throw beans::UnknownPropertyException( "No WhichID " + OUString::number(pMap->nWID) + " for " + aPropertyName, static_cast<cppu::OWeakObject*>(this));
SfxItemSet aSet( mpModel->GetItemPool(), {{pMap->nWID, pMap->nWID}});
aSet.Put(mpModel->GetItemPool().GetDefaultItem(pMap->nWID));
SfxItemSet aSet( GetSdrObject()->getSdrModelFromSdrObject().GetItemPool(), {{pMap->nWID, pMap->nWID}});
aSet.Put(GetSdrObject()->getSdrModelFromSdrObject().GetItemPool().GetDefaultItem(pMap->nWID));
return GetAnyForItem( aSet, pMap );
}
@@ -3016,15 +2996,15 @@
{
::SolarMutexGuard aGuard;
if( !mpObj.is() )
if( !HasSdrObject() )
throw lang::DisposedException();
mpObj->ClearMergedItem(); // nWhich == 0 => all
GetSdrObject()->ClearMergedItem(); // nWhich == 0 => all
if(dynamic_cast<const SdrGrafObj*>(mpObj.get()) != nullptr)
if(dynamic_cast<const SdrGrafObj*>(GetSdrObject()) != nullptr)
{
// defaults for graphic objects have changed:
mpObj->SetMergedItem( XFillStyleItem( drawing::FillStyle_NONE ) );
mpObj->SetMergedItem( XLineStyleItem( drawing::LineStyle_NONE ) );
GetSdrObject()->SetMergedItem( XFillStyleItem( drawing::FillStyle_NONE ) );
GetSdrObject()->SetMergedItem( XLineStyleItem( drawing::LineStyle_NONE ) );
}
// #i68523# special handling for Svx3DCharacterModeItem, this is not saved
@@ -3032,13 +3012,12 @@
// does not load lathe or extrude objects, it is possible to set the items
// here.
// For other solution possibilities, see task description.
if( dynamic_cast<const E3dLatheObj* >(mpObj.get()) != nullptr|| dynamic_cast<const E3dExtrudeObj* >(mpObj.get()) != nullptr)
if( dynamic_cast<const E3dLatheObj* >(GetSdrObject()) != nullptr|| dynamic_cast<const E3dExtrudeObj* >(GetSdrObject()) != nullptr)
{
mpObj->SetMergedItem(Svx3DCharacterModeItem(true));
GetSdrObject()->SetMergedItem(Svx3DCharacterModeItem(true));
}
if (mpModel)
mpModel->SetChanged();
GetSdrObject()->getSdrModelFromSdrObject().SetChanged();
}
void SvxShape::setPropertiesToDefault(
@@ -3126,9 +3105,9 @@
{
::SolarMutexGuard aGuard;
if( mpObj.is() && mpObj->GetObjInventor() == SdrInventor::Default)
if( HasSdrObject() && GetSdrObject()->GetObjInventor() == SdrInventor::Default)
{
const sal_uInt16 nIdent = mpObj->GetObjIdentifier();
const sal_uInt16 nIdent = GetSdrObject()->GetObjIdentifier();
switch(nIdent)
{
@@ -3653,10 +3632,10 @@
}
}
}
else if( mpObj.is() && mpObj->GetObjInventor() == SdrInventor::FmForm)
else if( HasSdrObject() && GetSdrObject()->GetObjInventor() == SdrInventor::FmForm)
{
#if OSL_DEBUG_LEVEL > 0
const sal_uInt16 nIdent = mpObj->GetObjIdentifier();
const sal_uInt16 nIdent = GetSdrObject()->GetObjIdentifier();
OSL_ENSURE( nIdent == OBJ_UNO, "SvxShape::_getSupportedServiceNames: SdrInventor::FmForm, but no UNO object?" );
#endif
static uno::Sequence< OUString > *pSeq = nullptr;
@@ -3687,9 +3666,9 @@
::SolarMutexGuard aGuard;
uno::Reference< container::XIndexContainer > xGluePoints( mxGluePoints );
if( mpObj.is() && !xGluePoints.is() )
if( HasSdrObject() && !xGluePoints.is() )
{
uno::Reference< container::XIndexContainer > xNew( SvxUnoGluePointAccess_createInstance( mpObj.get() ), uno::UNO_QUERY );
uno::Reference< container::XIndexContainer > xNew( SvxUnoGluePointAccess_createInstance( GetSdrObject() ), uno::UNO_QUERY );
mxGluePoints = xGluePoints = xNew;
}
@@ -3701,9 +3680,9 @@
{
::SolarMutexGuard aGuard;
if( mpObj.is() && mpObj->GetObjList() )
if( HasSdrObject() && GetSdrObject()->GetObjList() )
{
SdrObjList* pObjList = mpObj->GetObjList();
SdrObjList* pObjList = GetSdrObject()->GetObjList();
switch (pObjList->GetListKind())
{
@@ -3823,7 +3802,7 @@
case OBJ_PATHPOLY:
case OBJ_PATHPLIN:
{
const sal_uInt32 nId = mpObj->GetObjIdentifier();
const sal_uInt32 nId = GetSdrObject()->GetObjIdentifier();
if( nId != mpImpl->mnObjId )
{
@@ -3838,7 +3817,7 @@
SvxShapeText::SvxShapeText(SdrObject* pObject)
: SvxShape( pObject, getSvxMapProvider().GetMap(SVXMAP_TEXT), getSvxMapProvider().GetPropertySet(SVXMAP_TEXT, SdrObject::GetGlobalDrawObjectItemPool()) ), SvxUnoTextBase( ImplGetSvxUnoOutlinerTextCursorSvxPropertySet() )
{
if( pObject && pObject->GetModel() )
if( pObject )
SetEditSource( new SvxTextEditSource( pObject, nullptr ) );
}
@@ -3846,7 +3825,7 @@
SvxShapeText::SvxShapeText(SdrObject* pObject, const SfxItemPropertyMapEntry* pPropertyMap, const SvxItemPropertySet* pPropertySet)
: SvxShape( pObject, pPropertyMap, pPropertySet ), SvxUnoTextBase( ImplGetSvxUnoOutlinerTextCursorSvxPropertySet() )
{
if( pObject && pObject->GetModel() )
if( pObject )
SetEditSource( new SvxTextEditSource( pObject, nullptr ) );
}
@@ -4002,7 +3981,7 @@
if( pProperty->nWID == SDRATTR_TEXTDIRECTION )
{
SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >( mpObj.get() );
SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >( GetSdrObject() );
if( pTextObj )
{
css::text::WritingMode eMode;
@@ -4020,7 +3999,7 @@
{
if( pProperty->nWID == SDRATTR_TEXTDIRECTION )
{
SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >( mpObj.get() );
SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >( GetSdrObject() );
if( pTextObj && pTextObj->IsVerticalWriting() )
rValue <<= css::text::WritingMode_TB_RL;
else
diff --git a/svx/source/unodraw/unoshtxt.cxx b/svx/source/unodraw/unoshtxt.cxx
index 4cb601c..f09305d 100644
--- a/svx/source/unodraw/unoshtxt.cxx
+++ b/svx/source/unodraw/unoshtxt.cxx
@@ -80,11 +80,11 @@
private:
oslInterlockedCount maRefCount;
SdrObject* mpObject;
SdrObject* mpObject; // TTTT could be reference (?)
SdrText* mpText;
SdrView* mpView;
VclPtr<const vcl::Window> mpWindow;
SdrModel* mpModel;
SdrModel* mpModel; // TTTT probably not needed -> use SdrModel from SdrObject (?)
SdrOutliner* mpOutliner;
SvxOutlinerForwarder* mpTextForwarder;
SvxDrawOutlinerViewForwarder* mpViewForwarder; // if non-NULL, use GetViewModeTextForwarder text forwarder
@@ -147,8 +147,6 @@
virtual void ObjectInDestruction(const SdrObject& rObject) override;
void ChangeModel( SdrModel* pNewModel );
void UpdateOutliner();
};
@@ -159,7 +157,7 @@
mpText ( pText ),
mpView ( nullptr ),
mpWindow ( nullptr ),
mpModel ( pObject ? pObject->GetModel() : nullptr ),
mpModel ( pObject ? &pObject->getSdrModelFromSdrObject() : nullptr ), // TTTT should be reference
mpOutliner ( nullptr ),
mpTextForwarder ( nullptr ),
mpViewForwarder ( nullptr ),
@@ -195,7 +193,7 @@
mpText ( pText ),
mpView ( &rView ),
mpWindow ( &rWindow ),
mpModel ( rObject.GetModel() ),
mpModel ( &rObject.getSdrModelFromSdrObject() ), // TTTT should be reference
mpOutliner ( nullptr ),
mpTextForwarder ( nullptr ),
mpViewForwarder ( nullptr ),
@@ -264,51 +262,6 @@
delete this;
}
void SvxTextEditSourceImpl::ChangeModel( SdrModel* pNewModel )
{
if( mpModel != pNewModel )
{
if( mpModel )
EndListening( *mpModel );
if( mpOutliner )
{
if( mpModel )
mpModel->disposeOutliner( mpOutliner );
else
delete mpOutliner;
mpOutliner = nullptr;
}
if( mpView )
{
EndListening( *mpView );
mpView = nullptr;
}
mpWindow = nullptr;
m_xLinguServiceManager.clear();
mpModel = pNewModel;
if( mpTextForwarder )
{
delete mpTextForwarder;
mpTextForwarder = nullptr;
}
if( mpViewForwarder )
{
delete mpViewForwarder;
mpViewForwarder = nullptr;
}
if( mpModel )
StartListening( *mpModel );
}
}
void SvxTextEditSourceImpl::Notify(SfxBroadcaster& rBC, const SfxHint& rHint)
{
// #i105988 keep reference to this object
@@ -638,7 +591,7 @@
bool bVertical = pOutlinerParaObject && pOutlinerParaObject->IsVertical();
// set objects style sheet on empty outliner
SfxStyleSheetPool* pPool = static_cast<SfxStyleSheetPool*>(mpObject->GetModel()->GetStyleSheetPool());
SfxStyleSheetPool* pPool = static_cast<SfxStyleSheetPool*>(mpObject->getSdrModelFromSdrObject().GetStyleSheetPool());
if( pPool )
mpOutliner->SetStyleSheetPool( pPool );
@@ -709,10 +662,7 @@
return nullptr;
if( mpModel == nullptr )
mpModel = mpObject->GetModel();
if( mpModel == nullptr )
return nullptr;
mpModel = &mpObject->getSdrModelFromSdrObject();
// distinguish the cases
// a) connected to view, maybe edit mode is active, can work directly on the EditOutliner
@@ -763,10 +713,7 @@
return nullptr;
if( mpModel == nullptr )
mpModel = mpObject->GetModel();
if( mpModel == nullptr )
return nullptr;
mpModel = &mpObject->getSdrModelFromSdrObject();
// shall we delete?
if( mpViewForwarder )
@@ -1108,11 +1055,6 @@
return mpImpl->getRanges();
}
void SvxTextEditSource::ChangeModel( SdrModel* pNewModel )
{
mpImpl->ChangeModel( pNewModel );
}
void SvxTextEditSource::UpdateOutliner()
{
mpImpl->UpdateOutliner();
diff --git a/svx/source/unogallery/unogaltheme.cxx b/svx/source/unogallery/unogaltheme.cxx
index 404a9bb..1bf753b 100644
--- a/svx/source/unogallery/unogaltheme.cxx
+++ b/svx/source/unogallery/unogaltheme.cxx
@@ -254,13 +254,14 @@
uno::Reference< drawing::XDrawPages > xDrawPages( xDrawPagesSupplier->getDrawPages(), uno::UNO_QUERY_THROW );
uno::Reference< drawing::XDrawPage > xPage( xDrawPages->getByIndex( 0 ), uno::UNO_QUERY_THROW );
SvxDrawPage* pUnoPage = xPage.is() ? SvxDrawPage::getImplementation( xPage ) : nullptr;
SdrModel* pOrigModel = pUnoPage ? pUnoPage->GetSdrPage()->GetModel() : nullptr;
SdrModel* pOrigModel = pUnoPage ? &pUnoPage->GetSdrPage()->getSdrModelFromSdrPage() : nullptr;
SdrPage* pOrigPage = pUnoPage ? pUnoPage->GetSdrPage() : nullptr;
if (pOrigPage && pOrigModel)
{
FmFormModel* pTmpModel = new FmFormModel(&pOrigModel->GetItemPool());
SdrPage* pNewPage = pOrigPage->Clone();
// Clone to new target SdrModel
SdrPage* pNewPage = pOrigPage->Clone(pTmpModel);
pTmpModel->InsertPage(pNewPage, 0);
uno::Reference< lang::XComponent > xDrawing( new GalleryDrawingModel( pTmpModel ) );
diff --git a/sw/inc/dcontact.hxx b/sw/inc/dcontact.hxx
index 87c18ff..2262eea 100644
--- a/sw/inc/dcontact.hxx
+++ b/sw/inc/dcontact.hxx
@@ -196,7 +196,7 @@
public:
/// Creates DrawObject and registers it with the Model.
SwFlyDrawContact( SwFlyFrameFormat* pToRegisterIn );
SwFlyDrawContact(SwFlyFrameFormat* pToRegisterIn, SdrModel& rTargetModel);
static SwVirtFlyDrawObj* CreateNewRef(SwFlyFrame* pFly, SwFlyFrameFormat* pFormat);
virtual ~SwFlyDrawContact() override;
@@ -240,15 +240,17 @@
virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact() override;
public:
SwDrawVirtObj(
SdrModel& rSdrModel,
SdrObject& _rNewObj,
SwDrawContact& _rDrawContact);
SwDrawVirtObj( SdrObject& _rNewObj,
SwDrawContact& _rDrawContact );
virtual ~SwDrawVirtObj() override;
/// access to offset
virtual const Point GetOffset() const override;
virtual SwDrawVirtObj* Clone() const override;
virtual SwDrawVirtObj* Clone(SdrModel* pTargetModel = nullptr) const override;
SwDrawVirtObj& operator= (const SwDrawVirtObj& rObj);
/// connection to writer layout
diff --git a/sw/inc/dpage.hxx b/sw/inc/dpage.hxx
index f905f68..7b3b50e 100644
--- a/sw/inc/dpage.hxx
+++ b/sw/inc/dpage.hxx
@@ -30,6 +30,7 @@
class SwDPage final : public FmFormPage, public SdrObjUserCall
{
SwDPage &operator=(const SwDPage&) = delete;
SwDPage(const SwDPage&) = delete;
std::unique_ptr<SdrPageGridFrameList> pGridLst;
SwDoc* pDoc;
@@ -38,8 +39,7 @@
explicit SwDPage(SwDrawModel& rNewModel, bool bMasterPage);
virtual ~SwDPage() override;
virtual SwDPage* Clone() const override;
virtual SwDPage* Clone(SdrModel* pNewModel) const override;
virtual SwDPage* Clone(SdrModel* pNewModel = nullptr) const override;
// #i3694#
// This GetOffset() method is not needed anymore, it even leads to errors.
@@ -54,9 +54,7 @@
virtual css::uno::Reference< css::uno::XInterface > createUnoPage() override;
private:
void lateInit(const SwDPage& rPage, SwDrawModel* pNewModel);
SwDPage(const SwDPage& rSrcPage);
void lateInit(const SwDPage& rSrcPage);
};
#endif // INCLUDED_SW_INC_DPAGE_HXX
diff --git a/sw/inc/frmfmt.hxx b/sw/inc/frmfmt.hxx
index e90b808..01cf869 100644
--- a/sw/inc/frmfmt.hxx
+++ b/sw/inc/frmfmt.hxx
@@ -38,6 +38,8 @@
class SdrObject;
class SwRootFrame;
class SwFlyDrawContact;
class SdrModel;
namespace sw
{
class DocumentLayoutManager;
diff --git a/sw/inc/unotxdoc.hxx b/sw/inc/unotxdoc.hxx
index eebd5d2..eb0964f9 100644
--- a/sw/inc/unotxdoc.hxx
+++ b/sw/inc/unotxdoc.hxx
@@ -200,6 +200,9 @@
using SfxBaseModel::removeEventListener;
protected:
/** abstract SdrModel provider */
virtual SdrModel* getSdrModelFromUnoModel() const override;
virtual ~SwXTextDocument() override;
public:
SwXTextDocument(SwDocShell* pShell);
diff --git a/sw/source/core/doc/doclay.cxx b/sw/source/core/doc/doclay.cxx
index 3b93cd9..4430547 100644
--- a/sw/source/core/doc/doclay.cxx
+++ b/sw/source/core/doc/doclay.cxx
@@ -125,7 +125,9 @@
getIDocumentDrawModelAccess().GetDrawModel()->InsertPage( pPg );
}
SdrObject *pObj = rObj.Clone();
// TTTT Clone directly to target SdrModel
SdrObject *pObj = rObj.Clone(getIDocumentDrawModelAccess().GetDrawModel());
if( bMoveWithinDoc && SdrInventor::FmForm == pObj->GetObjInventor() )
{
// We need to preserve the Name for Controls
diff --git a/sw/source/core/draw/dcontact.cxx b/sw/source/core/draw/dcontact.cxx
index 2cc3235..c690b25 100644
--- a/sw/source/core/draw/dcontact.cxx
+++ b/sw/source/core/draw/dcontact.cxx
@@ -460,9 +460,11 @@
}
SwFlyDrawContact::SwFlyDrawContact( SwFlyFrameFormat *pToRegisterIn )
: SwContact( pToRegisterIn )
, mpMasterObj(new SwFlyDrawObj)
SwFlyDrawContact::SwFlyDrawContact(
SwFlyFrameFormat *pToRegisterIn,
SdrModel& rTargetModel)
: SwContact(pToRegisterIn),
mpMasterObj(new SwFlyDrawObj(rTargetModel))
{
// #i26791# - class <SwFlyDrawContact> contains the 'master'
// drawing object of type <SwFlyDrawObj> on its own.
@@ -510,8 +512,11 @@
IDocumentDrawModelAccess& rIDDMA = pFormat->getIDocumentDrawModelAccess();
SwFlyDrawContact* pContact = pFormat->GetOrCreateContact();
SwVirtFlyDrawObj* pDrawObj(new SwVirtFlyDrawObj(*pContact->GetMaster(), pFly));
pDrawObj->SetModel(pContact->GetMaster()->GetModel());
SwVirtFlyDrawObj* pDrawObj(
new SwVirtFlyDrawObj(
pContact->GetMaster()->getSdrModelFromSdrObject(),
*pContact->GetMaster(),
pFly));
pDrawObj->SetUserCall(pContact);
// The Reader creates the Masters and inserts them into the Page in
@@ -807,7 +812,12 @@
*/
SwDrawVirtObj* SwDrawContact::AddVirtObj()
{
maDrawVirtObjs.push_back(std::unique_ptr<SwDrawVirtObj>(new SwDrawVirtObj(*GetMaster(), *this)));
maDrawVirtObjs.push_back(
std::unique_ptr<SwDrawVirtObj>(
new SwDrawVirtObj(
GetMaster()->getSdrModelFromSdrObject(),
*GetMaster(),
*this)));
maDrawVirtObjs.back()->AddToDrawingPage();
return maDrawVirtObjs.back().get();
}
@@ -2138,27 +2148,29 @@
} // end of namespace sdr
/// implementation of class <SwDrawVirtObj>
sdr::contact::ViewContact* SwDrawVirtObj::CreateObjectSpecificViewContact()
{
return new sdr::contact::VCOfDrawVirtObj(*this);
}
SwDrawVirtObj::SwDrawVirtObj( SdrObject& _rNewObj,
SwDrawContact& _rDrawContact )
: SdrVirtObj( _rNewObj ),
// #i26791# - init new member <maAnchoredDrawObj>
maAnchoredDrawObj(),
mrDrawContact( _rDrawContact )
SwDrawVirtObj::SwDrawVirtObj(
SdrModel& rSdrModel,
SdrObject& _rNewObj,
SwDrawContact& _rDrawContact)
: SdrVirtObj(rSdrModel, _rNewObj ),
maAnchoredDrawObj(),
mrDrawContact(_rDrawContact)
{
// #i26791#
maAnchoredDrawObj.SetDrawObj( *this );
// #i35635# - set initial position out of sight
NbcMove( Size( -16000, -16000 ) );
}
SwDrawVirtObj::~SwDrawVirtObj()
{}
{
}
SwDrawVirtObj& SwDrawVirtObj::operator=( const SwDrawVirtObj& rObj )
{
@@ -2168,9 +2180,12 @@
return *this;
}
SwDrawVirtObj* SwDrawVirtObj::Clone() const
SwDrawVirtObj* SwDrawVirtObj::Clone(SdrModel* pTargetModel) const
{
SwDrawVirtObj* pObj = new SwDrawVirtObj( rRefObj, mrDrawContact );
SwDrawVirtObj* pObj = new SwDrawVirtObj(
nullptr == pTargetModel ? getSdrModelFromSdrObject() : *pTargetModel,
rRefObj,
mrDrawContact);
pObj->operator=( *this );
// Note: Member <maAnchoredDrawObj> hasn't to be considered.
diff --git a/sw/source/core/draw/dflyobj.cxx b/sw/source/core/draw/dflyobj.cxx
index 93a58d2..cd74e92 100644
--- a/sw/source/core/draw/dflyobj.cxx
+++ b/sw/source/core/draw/dflyobj.cxx
@@ -121,7 +121,8 @@
return new sdr::contact::VCOfSwFlyDrawObj(*this);
}
SwFlyDrawObj::SwFlyDrawObj()
SwFlyDrawObj::SwFlyDrawObj(SdrModel& rSdrModel)
: SdrObject(rSdrModel)
{
}
@@ -130,7 +131,6 @@
}
// SwFlyDrawObj - Factory-Methods
SdrInventor SwFlyDrawObj::GetObjInventor() const
{
return SdrInventor::Swg;
@@ -142,7 +142,6 @@
}
// TODO: Need own primitive to get the FlyFrame paint working
namespace drawinglayer
{
namespace primitive2d
@@ -421,9 +420,12 @@
return new sdr::contact::VCOfSwVirtFlyDrawObj(*this);
}
SwVirtFlyDrawObj::SwVirtFlyDrawObj(SdrObject& rNew, SwFlyFrame* pFly) :
SdrVirtObj( rNew ),
m_pFlyFrame( pFly )
SwVirtFlyDrawObj::SwVirtFlyDrawObj(
SdrModel& rSdrModel,
SdrObject& rNew,
SwFlyFrame* pFly)
: SdrVirtObj(rSdrModel, rNew),
m_pFlyFrame(pFly)
{
const SvxProtectItem &rP = m_pFlyFrame->GetFormat()->GetProtect();
bMovProt = rP.IsPosProtected();
diff --git a/sw/source/core/draw/dobjfac.cxx b/sw/source/core/draw/dobjfac.cxx
index e358764..e11e375 100644
--- a/sw/source/core/draw/dobjfac.cxx
+++ b/sw/source/core/draw/dobjfac.cxx
@@ -31,7 +31,7 @@
// No switch, there's only one at the moment
OSL_ENSURE( aParams.nObjIdentifier == SwFlyDrawObjIdentifier,
"Wrong inventor or identifier" );
return new SwFlyDrawObj;
return new SwFlyDrawObj(aParams.rSdrModel);
}
return nullptr;
}
diff --git a/sw/source/core/draw/dpage.cxx b/sw/source/core/draw/dpage.cxx
index 716e41c..d50a7f5 100644
--- a/sw/source/core/draw/dpage.cxx
+++ b/sw/source/core/draw/dpage.cxx
@@ -49,17 +49,21 @@
using namespace ::com::sun::star::drawing;
using namespace ::com::sun::star::frame;
SwDPage::SwDPage(SwDrawModel& rNewModel, bool bMasterPage) :
FmFormPage(rNewModel, bMasterPage),
SwDPage::SwDPage(SwDrawModel& rNewModel, bool bMasterPage)
: FmFormPage(rNewModel, bMasterPage),
pGridLst( nullptr ),
pDoc(&rNewModel.GetDoc())
{
}
SwDPage::SwDPage(const SwDPage& rSrcPage) :
FmFormPage( rSrcPage ),
pDoc( nullptr )
SwDPage::~SwDPage()
{
}
void SwDPage::lateInit(const SwDPage& rSrcPage)
{
FmFormPage::lateInit( rSrcPage );
if ( rSrcPage.pGridLst )
{
pGridLst.reset( new SdrPageGridFrameList );
@@ -68,39 +72,15 @@
}
}
SwDPage::~SwDPage()
{
}
void SwDPage::lateInit(const SwDPage& rPage, SwDrawModel* const pNewModel)
{
FmFormPage::lateInit( rPage, pNewModel );
SwDrawModel* pSwDrawModel = pNewModel;
if (!pSwDrawModel)
{
pSwDrawModel = &dynamic_cast<SwDrawModel&>(*GetModel());
assert( pSwDrawModel );
}
pDoc = &pSwDrawModel->GetDoc();
}
SwDPage* SwDPage::Clone() const
{
return Clone( nullptr );
}
SwDPage* SwDPage::Clone(SdrModel* const pNewModel) const
{
SwDPage* const pNewPage = new SwDPage( *this );
SwDrawModel* pSwDrawModel = nullptr;
if ( pNewModel )
{
pSwDrawModel = &dynamic_cast<SwDrawModel&>(*pNewModel);
assert( pSwDrawModel );
}
pNewPage->lateInit( *this, pSwDrawModel );
return pNewPage;
SwDrawModel& rSwDrawModel(static_cast< SwDrawModel& >(nullptr == pNewModel ? getSdrModelFromSdrPage() : *pNewModel));
SwDPage* pClonedSwDPage(
new SwDPage(
rSwDrawModel,
IsMasterPage()));
pClonedSwDPage->lateInit(*this);
return pClonedSwDPage;
}
SdrObject* SwDPage::ReplaceObject( SdrObject* pNewObj, size_t nObjNum )
@@ -126,7 +106,7 @@
const SdrPageGridFrameList* SwDPage::GetGridFrameList(
const SdrPageView* pPV, const tools::Rectangle *pRect ) const
{
SwViewShell* pSh = static_cast< SwDrawModel* >(GetModel())->GetDoc().getIDocumentLayoutAccess().GetCurrentViewShell();
SwViewShell* pSh = static_cast< SwDrawModel& >(getSdrModelFromSdrPage()).GetDoc().getIDocumentLayoutAccess().GetCurrentViewShell();
if(pSh)
{
for(SwViewShell& rShell : pSh->GetRingContainer())
diff --git a/sw/source/core/draw/dview.cxx b/sw/source/core/draw/dview.cxx
index ef557e8..2551634 100644
--- a/sw/source/core/draw/dview.cxx
+++ b/sw/source/core/draw/dview.cxx
@@ -94,8 +94,11 @@
return nullptr;
}
SwDrawView::SwDrawView( SwViewShellImp &rI, SdrModel *pMd, OutputDevice *pOutDev) :
FmFormView( static_cast<FmFormModel*>(pMd), pOutDev ),
SwDrawView::SwDrawView(
SwViewShellImp& rI,
FmFormModel& rFmFormModel,
OutputDevice* pOutDev)
: FmFormView(rFmFormModel, pOutDev),
m_rImp( rI )
{
SetPageVisible( false );
diff --git a/sw/source/core/frmedt/fecopy.cxx b/sw/source/core/frmedt/fecopy.cxx
index fd44d6e..385f8da 100644
--- a/sw/source/core/frmedt/fecopy.cxx
+++ b/sw/source/core/frmedt/fecopy.cxx
@@ -1287,7 +1287,10 @@
pOle2Obj->Disconnect();
// create new graphic shape with the ole graphic and shape size
SdrGrafObj* pGraphicObj = new SdrGrafObj( aGraphic, pOle2Obj->GetCurrentBoundRect() );
SdrGrafObj* pGraphicObj = new SdrGrafObj(
*_pModel, // TTTT should be reference
aGraphic,
pOle2Obj->GetCurrentBoundRect());
// apply layer of ole2 shape at graphic shape
pGraphicObj->SetLayer( pOle2Obj->GetLayer() );
diff --git a/sw/source/core/frmedt/feshview.cxx b/sw/source/core/frmedt/feshview.cxx
index a47aa96..250fec8 100644
--- a/sw/source/core/frmedt/feshview.cxx
+++ b/sw/source/core/frmedt/feshview.cxx
@@ -111,10 +111,10 @@
namespace {
::basegfx::B2DPolyPolygon getPolygon(const char* pResId, SdrModel const * pDoc)
::basegfx::B2DPolyPolygon getPolygon(const char* pResId, const SdrModel& rModel)
{
::basegfx::B2DPolyPolygon aRetval;
XLineEndListRef pLineEndList = pDoc->GetLineEndList();
XLineEndListRef pLineEndList(rModel.GetLineEndList());
if( pLineEndList.is() )
{
@@ -894,7 +894,7 @@
void SwFEShell::SetLineEnds(SfxItemSet& rAttr, SdrObject const * pObj, sal_uInt16 nSlotId)
{
SdrModel *pDoc = pObj->GetModel();
SdrModel& rModel(pObj->getSdrModelFromSdrObject());
if ( !(nSlotId == SID_LINE_ARROW_START ||
nSlotId == SID_LINE_ARROW_END ||
@@ -908,7 +908,7 @@
// set attributes of line start and ends
// arrowhead
::basegfx::B2DPolyPolygon aArrow( getPolygon( RID_SVXSTR_ARROW, pDoc ) );
::basegfx::B2DPolyPolygon aArrow( getPolygon( RID_SVXSTR_ARROW, rModel ) );
if( !aArrow.count() )
{
::basegfx::B2DPolygon aNewArrow;
@@ -920,7 +920,7 @@
}
// Circles
::basegfx::B2DPolyPolygon aCircle( getPolygon( RID_SVXSTR_CIRCLE, pDoc ) );
::basegfx::B2DPolyPolygon aCircle( getPolygon( RID_SVXSTR_CIRCLE, rModel ) );
if( !aCircle.count() )
{
::basegfx::B2DPolygon aNewCircle;
@@ -930,7 +930,7 @@
}
// Square
::basegfx::B2DPolyPolygon aSquare( getPolygon( RID_SVXSTR_SQUARE, pDoc ) );
::basegfx::B2DPolyPolygon aSquare( getPolygon( RID_SVXSTR_SQUARE, rModel ) );
if( !aSquare.count() )
{
::basegfx::B2DPolygon aNewSquare;
@@ -942,7 +942,7 @@
aSquare.append(aNewSquare);
}
SfxItemSet aSet( pDoc->GetItemPool() );
SfxItemSet aSet( rModel.GetItemPool() );
long nWidth = 100; // (1/100th mm)
// determine line width and calculate with it the line end width
@@ -2919,8 +2919,9 @@
SdrView* pDrawView = GetDrawView();
SdrModel* pDrawModel = pDrawView->GetModel();
SdrObject* pObj = SdrObjFactory::MakeNewObject(
SdrInventor::Default, eSdrObjectKind,
nullptr, pDrawModel);
*pDrawModel,
SdrInventor::Default,
eSdrObjectKind);
if(pObj)
{
@@ -3040,7 +3041,7 @@
aTempPoly.append(basegfx::B2DPoint(aRect.BottomRight().getX(), nYMiddle));
aPoly.append(aTempPoly);
SfxItemSet aAttr(pObj->GetModel()->GetItemPool());
SfxItemSet aAttr(pObj->getSdrModelFromSdrObject().GetItemPool());
SetLineEnds(aAttr, pObj, nSlotId);
pObj->SetMergedItemSet(aAttr);
}
diff --git a/sw/source/core/inc/dflyobj.hxx b/sw/source/core/inc/dflyobj.hxx
index a0cf7fd2..6e157b1 100644
--- a/sw/source/core/inc/dflyobj.hxx
+++ b/sw/source/core/inc/dflyobj.hxx
@@ -42,7 +42,7 @@
public:
SwFlyDrawObj();
SwFlyDrawObj(SdrModel& rSdrModel);
virtual ~SwFlyDrawObj() override;
// for instantiation of this class while loading (via factory)
@@ -80,7 +80,10 @@
// RotGrfFlyFrame: Check if this is a SwGrfNode
bool ContainsSwGrfNode() const;
SwVirtFlyDrawObj(SdrObject& rNew, SwFlyFrame* pFly);
SwVirtFlyDrawObj(
SdrModel& rSdrModel,
SdrObject& rNew,
SwFlyFrame* pFly);
virtual ~SwVirtFlyDrawObj() override;
// override method of base class SdrVirtObj
diff --git a/sw/source/core/inc/dview.hxx b/sw/source/core/inc/dview.hxx
index aeb1e86..66b51fd4 100644
--- a/sw/source/core/inc/dview.hxx
+++ b/sw/source/core/inc/dview.hxx
@@ -79,7 +79,10 @@
virtual SdrUndoManager* getSdrUndoManagerForEnhancedTextEdit() const override;
public:
SwDrawView( SwViewShellImp &rI, SdrModel *pMd, OutputDevice* pOutDev );
SwDrawView(
SwViewShellImp &rI,
FmFormModel& rFmFormModel,
OutputDevice* pOutDev);
// from base class
virtual SdrObject* GetMaxToTopObj(SdrObject* pObj) const override;
diff --git a/sw/source/core/layout/atrfrm.cxx b/sw/source/core/layout/atrfrm.cxx
index 91d8e15..d7b8421 100644
--- a/sw/source/core/layout/atrfrm.cxx
+++ b/sw/source/core/layout/atrfrm.cxx
@@ -2886,7 +2886,11 @@
SwFlyDrawContact* SwFlyFrameFormat::GetOrCreateContact()
{
if(!m_pContact)
m_pContact.reset(new SwFlyDrawContact(this));
{
SwDrawModel* pDrawModel(GetDoc()->getIDocumentDrawModelAccess().GetOrCreateDrawModel());
m_pContact.reset(new SwFlyDrawContact(this, *pDrawModel));
}
return m_pContact.get();
}
diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx
index ffc0940..592a8a7 100644
--- a/sw/source/core/layout/paintfrm.cxx
+++ b/sw/source/core/layout/paintfrm.cxx
@@ -7384,7 +7384,7 @@
if ( pMod )
{
SdrObject *pObj = FindSdrObject();
std::unique_ptr<SdrView> pView( new SdrView( pMod ) );
std::unique_ptr<SdrView> pView( new SdrView( *pMod ) );
SdrPageView *pPgView = pView->ShowSdrPage(pView->GetModel()->GetPage(0));
pView->MarkObj( pObj, pPgView );
aRet = pView->GetMarkedObjBitmapEx();
diff --git a/sw/source/core/view/viewimp.cxx b/sw/source/core/view/viewimp.cxx
index ee204d1..2146529 100644
--- a/sw/source/core/view/viewimp.cxx
+++ b/sw/source/core/view/viewimp.cxx
@@ -228,7 +228,10 @@
pOutDevForDrawView = GetShell()->GetOut();
}
m_pDrawView = new SwDrawView( *this, rIDDMA.GetDrawModel(), pOutDevForDrawView);
m_pDrawView = new SwDrawView(
*this,
*rIDDMA.GetOrCreateDrawModel(),
pOutDevForDrawView);
}
GetDrawView()->SetActiveLayer("Heaven");
diff --git a/sw/source/filter/html/htmldrawreader.cxx b/sw/source/filter/html/htmldrawreader.cxx
index 7d74657..8b15895 100644
--- a/sw/source/filter/html/htmldrawreader.cxx
+++ b/sw/source/filter/html/htmldrawreader.cxx
@@ -355,8 +355,12 @@
// #i52858# - method name changed
SwDrawModel* pModel = m_xDoc->getIDocumentDrawModelAccess().GetOrCreateDrawModel();
SdrPage* pPg = pModel->GetPage( 0 );
m_pMarquee = SdrObjFactory::MakeNewObject( SdrInventor::Default,
OBJ_TEXT, pPg, pModel );
m_pMarquee = SdrObjFactory::MakeNewObject(
*pModel,
SdrInventor::Default,
OBJ_TEXT,
pPg);
if( !m_pMarquee )
return;
diff --git a/sw/source/filter/ww8/wrtw8esh.cxx b/sw/source/filter/ww8/wrtw8esh.cxx
index 7406f15..c27173b 100644
--- a/sw/source/filter/ww8/wrtw8esh.cxx
+++ b/sw/source/filter/ww8/wrtw8esh.cxx
@@ -2966,10 +2966,8 @@
// #i71538# use complete SdrViews
// SdrExchangeView aExchange(pModel, pDevice);
SdrView aExchange(pModel, pDevice);
Graphic aGraphic(SdrExchangeView::GetObjGraphic(pModel, pSdrObj));
SdrView aExchange(*pModel, pDevice);
const Graphic aGraphic(SdrExchangeView::GetObjGraphic(*pSdrObj));
EscherPropertyContainer aPropOpt;
WriteOLEPicture(aPropOpt,
ShapeFlag::HaveAnchor | ShapeFlag::HaveShapeProperty | ShapeFlag::OLEShape, aGraphic,
diff --git a/sw/source/filter/ww8/wrtww8gr.cxx b/sw/source/filter/ww8/wrtww8gr.cxx
index 4d9ceaa..ee2f929 100644
--- a/sw/source/filter/ww8/wrtww8gr.cxx
+++ b/sw/source/filter/ww8/wrtww8gr.cxx
@@ -67,6 +67,8 @@
#include <docsh.hxx>
#include <cstdio>
#include <o3tl/enumrange.hxx>
#include <IDocumentDrawModelAccess.hxx>
#include <drawdoc.hxx>
using namespace ::com::sun::star;
@@ -139,7 +141,18 @@
if ( pOLENd )
nAspect = pOLENd->GetAspect();
SdrOle2Obj *pRet = SvxMSDffManager::CreateSdrOLEFromStorage(
rStorageName,xObjStg,m_pDoc->GetDocStorage(),aGraph,aRect,tools::Rectangle(),nullptr,nErr,0,nAspect, m_pWriter->GetBaseURL());
*m_pDoc->getIDocumentDrawModelAccess().GetOrCreateDrawModel(),
rStorageName,
xObjStg,
m_pDoc->GetDocStorage(),
aGraph,
aRect,
tools::Rectangle(),
nullptr,
nErr,
0,
nAspect,
m_pWriter->GetBaseURL());
if (pRet)
{
diff --git a/sw/source/filter/ww8/ww8graf.cxx b/sw/source/filter/ww8/ww8graf.cxx
index ed67365..1b165cf 100644
--- a/sw/source/filter/ww8/ww8graf.cxx
+++ b/sw/source/filter/ww8/ww8graf.cxx
@@ -326,7 +326,10 @@
::basegfx::B2DPolygon aPolygon;
aPolygon.append(::basegfx::B2DPoint(aP[0].X(), aP[0].Y()));
aPolygon.append(::basegfx::B2DPoint(aP[1].X(), aP[1].Y()));
SdrObject* pObj = new SdrPathObj(OBJ_LINE, ::basegfx::B2DPolyPolygon(aPolygon));
SdrObject* pObj = new SdrPathObj(
*m_pDrawModel,
OBJ_LINE,
::basegfx::B2DPolyPolygon(aPolygon));
SetStdAttr( rSet, aLine.aLnt, aLine.aShd );
SetLineEndAttr( rSet, aLine.aEpp, aLine.aLnt );
@@ -347,7 +350,9 @@
aP1.AdjustX(static_cast<sal_Int16>(SVBT16ToShort( pHd->dxa )) );
aP1.AdjustY(static_cast<sal_Int16>(SVBT16ToShort( pHd->dya )) );
SdrObject* pObj = new SdrRectObj( tools::Rectangle( aP0, aP1 ) );
SdrObject* pObj = new SdrRectObj(
*m_pDrawModel,
tools::Rectangle(aP0, aP1));
SetStdAttr( rSet, aRect.aLnt, aRect.aShd );
SetFill( rSet, aRect.aFill );
@@ -368,7 +373,10 @@
aP1.AdjustX(static_cast<sal_Int16>(SVBT16ToShort( pHd->dxa )) );
aP1.AdjustY(static_cast<sal_Int16>(SVBT16ToShort( pHd->dya )) );
SdrObject* pObj = new SdrCircObj( OBJ_CIRC, tools::Rectangle( aP0, aP1 ) );
SdrObject* pObj = new SdrCircObj(
*m_pDrawModel,
OBJ_CIRC,
tools::Rectangle(aP0, aP1));
SetStdAttr( rSet, aElipse.aLnt, aElipse.aShd );
SetFill( rSet, aElipse.aFill );
@@ -400,8 +408,12 @@
aP1.AdjustX( -static_cast<sal_Int16>(SVBT16ToShort( pHd->dxa )) );
}
SdrObject* pObj = new SdrCircObj( OBJ_SECT, tools::Rectangle( aP0, aP1 ),
nW * 9000, ( ( nW + 1 ) & 3 ) * 9000 );
SdrObject* pObj = new SdrCircObj(
*m_pDrawModel,
OBJ_SECT,
tools::Rectangle(aP0, aP1),
nW * 9000,
( ( nW + 1 ) & 3 ) * 9000);
SetStdAttr( rSet, aArc.aLnt, aArc.aShd );
SetFill( rSet, aArc.aFill );
@@ -436,7 +448,11 @@
}
xP.reset();
SdrObject* pObj = new SdrPathObj(( SVBT16ToShort( aPoly.aBits1 ) & 0x1 ) ? OBJ_POLY : OBJ_PLIN, ::basegfx::B2DPolyPolygon(aP.getB2DPolygon()));
SdrObject* pObj = new SdrPathObj(
*m_pDrawModel,
(SVBT16ToShort(aPoly.aBits1) & 0x1) ? OBJ_POLY : OBJ_PLIN,
::basegfx::B2DPolyPolygon(aP.getB2DPolygon()));
SetStdAttr( rSet, aPoly.aLnt, aPoly.aShd );
SetFill( rSet, aPoly.aFill );
@@ -1096,13 +1112,12 @@
if( !pNew )
{
pNew = new SdrGrafObj;
pNew = new SdrGrafObj(*m_pDrawModel);
static_cast<SdrGrafObj*>(pNew)->SetGraphic(aGraph);
}
GrafikCtor();
pNew->SetModel( m_pDrawModel );
pNew->SetLogicRect( pTextObj->GetCurrentBoundRect() );
pNew->SetLayer( pTextObj->GetLayer() );
@@ -1225,8 +1240,11 @@
aP1.AdjustX(static_cast<sal_Int16>(SVBT16ToShort( pHd->dxa )) );
aP1.AdjustY(static_cast<sal_Int16>(SVBT16ToShort( pHd->dya )) );
SdrRectObj* pObj = new SdrRectObj( OBJ_TEXT, tools::Rectangle( aP0, aP1 ) );
pObj->SetModel( m_pDrawModel );
SdrRectObj* pObj = new SdrRectObj(
*m_pDrawModel,
OBJ_TEXT,
tools::Rectangle(aP0, aP1));
pObj->NbcSetSnapRect(tools::Rectangle(aP0, aP1));
Size aSize( static_cast<sal_Int16>(SVBT16ToShort( pHd->dxa )) ,
static_cast<sal_Int16>(SVBT16ToShort( pHd->dya )) );
@@ -1295,8 +1313,11 @@
+ m_nDrawYOfs2 + static_cast<sal_Int16>(SVBT16ToShort( xP[1] )) );
xP.reset();
SdrCaptionObj* pObj = new SdrCaptionObj( tools::Rectangle( aP0, aP1 ), aP2 );
pObj->SetModel( m_pDrawModel );
SdrCaptionObj* pObj = new SdrCaptionObj(
*m_pDrawModel,
tools::Rectangle(aP0, aP1),
aP2);
pObj->NbcSetSnapRect(tools::Rectangle(aP0, aP1));
Size aSize( static_cast<sal_Int16>(SVBT16ToShort( aCallB.dpheadTxbx.dxa )),
static_cast<sal_Int16>(SVBT16ToShort( aCallB.dpheadTxbx.dya )) );
@@ -1328,7 +1349,7 @@
m_nDrawXOfs = m_nDrawXOfs + static_cast<sal_Int16>(SVBT16ToShort( pHd->xa ));
m_nDrawYOfs = m_nDrawYOfs + static_cast<sal_Int16>(SVBT16ToShort( pHd->ya ));
SdrObject* pObj = new SdrObjGroup;
SdrObject* pObj = new SdrObjGroup(*m_pDrawModel);
short nLeft = static_cast<sal_Int16>(SVBT16ToShort( pHd->cb )) - sizeof( WW8_DPHEAD );
for (int i = 0; i < nGrouped && nLeft >= static_cast<short>(sizeof(WW8_DPHEAD)); ++i)
@@ -2794,7 +2815,10 @@
{
// Group objects don't have text. Insert a text object into
// the group for holding the text.
pSdrTextObj = new SdrRectObj( OBJ_TEXT, pThisGroup->GetCurrentBoundRect());
pSdrTextObj = new SdrRectObj(
*m_pDrawModel,
OBJ_TEXT,
pThisGroup->GetCurrentBoundRect());
SfxItemSet aSet(m_pDrawModel->GetItemPool());
aSet.Put(XFillStyleItem(drawing::FillStyle_NONE));
diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
index 33ff69a..0990ec4 100644
--- a/sw/source/filter/ww8/ww8par.cxx
+++ b/sw/source/filter/ww8/ww8par.cxx
@@ -497,9 +497,19 @@
else
{
ErrCode nError = ERRCODE_NONE;
pRet = CreateSdrOLEFromStorage( sStorageName, xSrcStg, xDstStg,
rGrf, rBoundRect, rVisArea, pStData, nError,
nSvxMSDffOLEConvFlags, css::embed::Aspects::MSOLE_CONTENT, rReader.GetBaseURL());
pRet = CreateSdrOLEFromStorage(
*pSdrModel,
sStorageName,
xSrcStg,
xDstStg,
rGrf,
rBoundRect,
rVisArea,
pStData,
nError,
nSvxMSDffOLEConvFlags,
css::embed::Aspects::MSOLE_CONTENT,
rReader.GetBaseURL());
}
}
return pRet;
@@ -733,7 +743,10 @@
if (bIsSimpleDrawingTextBox)
{
SdrObject::Free( pObj );
pObj = new SdrRectObj(OBJ_TEXT, rTextRect);
pObj = new SdrRectObj(
*pSdrModel,
OBJ_TEXT,
rTextRect);
}
// The vertical paragraph justification are contained within the
@@ -857,7 +870,6 @@
if (pObj != nullptr)
{
pObj->SetMergedItemSet(aSet);
pObj->SetModel(pSdrModel);
if (bVerticalText)
{
@@ -923,8 +935,10 @@
// simple rectangular objects are ignored by ImportObj() :-(
// this is OK for Draw but not for Calc and Writer
// cause here these objects have a default border
pObj = new SdrRectObj(rTextRect);
pObj->SetModel( pSdrModel );
pObj = new SdrRectObj(
*pSdrModel,
rTextRect);
SfxItemSet aSet( pSdrModel->GetItemPool() );
ApplyAttributes( rSt, aSet, rObjData );
diff --git a/sw/source/filter/ww8/ww8par4.cxx b/sw/source/filter/ww8/ww8par4.cxx
index fd82c91..d2a63a9 100644
--- a/sw/source/filter/ww8/ww8par4.cxx
+++ b/sw/source/filter/ww8/ww8par4.cxx
@@ -436,9 +436,21 @@
}
ErrCode nError = ERRCODE_NONE;
GrafikCtor();
pRet = SvxMSDffManager::CreateSdrOLEFromStorage(
aSrcStgName, xSrc0, m_pDocShell->GetStorage(), rGraph, aRect, aVisArea, pTmpData, nError,
SwMSDffManager::GetFilterFlags(), nAspect, GetBaseURL());
*m_pDrawModel,
aSrcStgName,
xSrc0,
m_pDocShell->GetStorage(),
rGraph,
aRect,
aVisArea,
pTmpData,
nError,
SwMSDffManager::GetFilterFlags(),
nAspect,
GetBaseURL());
m_pDataStream->Seek( nOldPos );
}
}
diff --git a/sw/source/filter/xml/swxml.cxx b/sw/source/filter/xml/swxml.cxx
index d64f3c2..e0244ca 100644
--- a/sw/source/filter/xml/swxml.cxx
+++ b/sw/source/filter/xml/swxml.cxx
@@ -458,7 +458,11 @@
pOle2Obj->Disconnect();
// create new graphic shape with the ole graphic and shape size
SdrGrafObj* pGraphicObj = new SdrGrafObj( aGraphic, pOle2Obj->GetCurrentBoundRect() );
SdrGrafObj* pGraphicObj = new SdrGrafObj(
pOle2Obj->getSdrModelFromSdrObject(),
aGraphic,
pOle2Obj->GetCurrentBoundRect());
// apply layer of ole2 shape at graphic shape
pGraphicObj->SetLayer( pOle2Obj->GetLayer() );
diff --git a/sw/source/uibase/ribbar/concustomshape.cxx b/sw/source/uibase/ribbar/concustomshape.cxx
index be8e19e..adbbd07 100644
--- a/sw/source/uibase/ribbar/concustomshape.cxx
+++ b/sw/source/uibase/ribbar/concustomshape.cxx
@@ -128,7 +128,7 @@
{
const SfxItemSet& rSource = pSourceObj->GetMergedItemSet();
SfxItemSet aDest(
pObj->GetModel()->GetItemPool(),
pObj->getSdrModelFromSdrObject().GetItemPool(),
svl::Items<
// Ranges from SdrAttrObj:
SDRATTR_START, SDRATTR_SHADOW_LAST,
diff --git a/sw/source/uibase/ribbar/conrect.cxx b/sw/source/uibase/ribbar/conrect.cxx
index 36f1050..395bca6 100644
--- a/sw/source/uibase/ribbar/conrect.cxx
+++ b/sw/source/uibase/ribbar/conrect.cxx
@@ -65,7 +65,7 @@
SdrObject* pObj = m_pView->GetDrawView()->GetCreateObj();
if (pObj)
{
SfxItemSet aAttr(pObj->GetModel()->GetItemPool());
SfxItemSet aAttr(pObj->getSdrModelFromSdrObject().GetItemPool());
SwFEShell::SetLineEnds(aAttr, pObj, m_nSlotId);
pObj->SetMergedItemSet(aAttr);
}
diff --git a/sw/source/uibase/shells/grfshex.cxx b/sw/source/uibase/shells/grfshex.cxx
index 6536cf5..e31d5a1 100644
--- a/sw/source/uibase/shells/grfshex.cxx
+++ b/sw/source/uibase/shells/grfshex.cxx
@@ -123,9 +123,10 @@
if (!bRet) { return bRet; }
}
SdrMediaObj* pObj = new SdrMediaObj( tools::Rectangle( aPos, aSize ) );
SdrMediaObj* pObj = new SdrMediaObj(
*rSh.GetDoc()->getIDocumentDrawModelAccess().GetDrawModel(),
tools::Rectangle(aPos, aSize));
pObj->SetModel(rSh.GetDoc()->getIDocumentDrawModelAccess().GetDrawModel()); // set before setURL
pObj->setURL( realURL, "" );
rSh.EnterStdMode();
rSh.SwFEShell::InsertDrawObj( *pObj, aPos );
diff --git a/sw/source/uibase/uno/unotxdoc.cxx b/sw/source/uibase/uno/unotxdoc.cxx
index 2fd36e8..3aa9a3c 100644
--- a/sw/source/uibase/uno/unotxdoc.cxx
+++ b/sw/source/uibase/uno/unotxdoc.cxx
@@ -450,6 +450,12 @@
{
}
SdrModel* SwXTextDocument::getSdrModelFromUnoModel() const
{
OSL_ENSURE(pDocShell->GetDoc()->getIDocumentDrawModelAccess().GetOrCreateDrawModel(), "No SdrModel in SwDoc, should not happen");
return pDocShell->GetDoc()->getIDocumentDrawModelAccess().GetDrawModel();
}
SwXTextDocument::~SwXTextDocument()
{
InitNewDoc();
diff --git a/xmloff/source/draw/xexptran.cxx b/xmloff/source/draw/xexptran.cxx
index 4601f35..54f7f70 100644
--- a/xmloff/source/draw/xexptran.cxx
+++ b/xmloff/source/draw/xexptran.cxx
@@ -33,6 +33,7 @@
#include <basegfx/polygon/b2dpolypolygon.hxx>
#include <basegfx/polygon/b2dpolypolygontools.hxx>
#include <basegfx/utils/unotools.hxx>
#include <basegfx/matrix/b3dhommatrixtools.hxx>
using namespace ::com::sun::star;
@@ -600,22 +601,7 @@
void SdXMLImExTransform3D::AddHomogenMatrix(const drawing::HomogenMatrix& xHomMat)
{
::basegfx::B3DHomMatrix aExportMatrix;
aExportMatrix.set(0, 0, xHomMat.Line1.Column1);
aExportMatrix.set(0, 1, xHomMat.Line1.Column2);
aExportMatrix.set(0, 2, xHomMat.Line1.Column3);
aExportMatrix.set(0, 3, xHomMat.Line1.Column4);
aExportMatrix.set(1, 0, xHomMat.Line2.Column1);
aExportMatrix.set(1, 1, xHomMat.Line2.Column2);
aExportMatrix.set(1, 2, xHomMat.Line2.Column3);
aExportMatrix.set(1, 3, xHomMat.Line2.Column4);
aExportMatrix.set(2, 0, xHomMat.Line3.Column1);
aExportMatrix.set(2, 1, xHomMat.Line3.Column2);
aExportMatrix.set(2, 2, xHomMat.Line3.Column3);
aExportMatrix.set(2, 3, xHomMat.Line3.Column4);
AddMatrix(aExportMatrix);
AddMatrix(basegfx::utils::UnoHomogenMatrixToB3DHomMatrix(xHomMat));
}
// gen string for export
@@ -928,26 +914,7 @@
if(!aFullTransform.isIdentity())
{
xHomMat.Line1.Column1 = aFullTransform.get(0, 0);
xHomMat.Line1.Column2 = aFullTransform.get(0, 1);
xHomMat.Line1.Column3 = aFullTransform.get(0, 2);
xHomMat.Line1.Column4 = aFullTransform.get(0, 3);
xHomMat.Line2.Column1 = aFullTransform.get(1, 0);
xHomMat.Line2.Column2 = aFullTransform.get(1, 1);
xHomMat.Line2.Column3 = aFullTransform.get(1, 2);
xHomMat.Line2.Column4 = aFullTransform.get(1, 3);
xHomMat.Line3.Column1 = aFullTransform.get(2, 0);
xHomMat.Line3.Column2 = aFullTransform.get(2, 1);
xHomMat.Line3.Column3 = aFullTransform.get(2, 2);
xHomMat.Line3.Column4 = aFullTransform.get(2, 3);
xHomMat.Line4.Column1 = aFullTransform.get(3, 0);
xHomMat.Line4.Column2 = aFullTransform.get(3, 1);
xHomMat.Line4.Column3 = aFullTransform.get(3, 2);
xHomMat.Line4.Column4 = aFullTransform.get(3, 3);
basegfx::utils::B3DHomMatrixToUnoHomogenMatrix(aFullTransform, xHomMat);
return true;
}